L' Apollo Router Core est un routeur graphique configurable et hautes performances écrit en Rust pour exécuter un supergraph fédéré qui utilise Apollo Federation 2.
Apollo Router Core est bien testé, régulièrement comparé, inclut la plupart des fonctionnalités majeures d'Apollo Gateway et est capable de gérer des charges de travail à l'échelle de la production.
Les nouvelles versions et leurs notes de version (ainsi que les notes sur les modifications importantes) peuvent être trouvées sur la page Versions, et la dernière version peut toujours être trouvée sur la dernière page. Le CHANGELOG.md
à la racine de ce référentiel contient également des modifications inédites en plus de l'historique complet des modifications.
Actuellement, nous publions de nouvelles versions toutes les 1 à 2 semaines.
Suivez le didacticiel de démarrage rapide pour être opérationnel avec le routeur.
Voir la documentation pour plus de détails.
Apollo Router Core nécessite qu'un fichier supergraph soit transmis comme argument --supergraph
et un fichier de configuration facultatif. à fournir. Ceux-ci sont soit situés dans le répertoire courant, soit explicitement spécifiés via un indicateur, soit par un chemin absolu, soit par un chemin relatif au répertoire courant.
Usage:
Commands:
config Configuration subcommands
help Print this message or the help of the given subcommand(s)
Options:
--log
Log level (off|error|warn|info|debug|trace) [env: APOLLO_ROUTER_LOG=] [default: info]
--hot-reload
Reload locally provided configuration and supergraph files automatically. This only affects watching of local files and does not affect supergraphs and configuration provided by GraphOS through Uplink, which is always reloaded immediately [env: APOLLO_ROUTER_HOT_RELOAD=]
-c, --config
Configuration location relative to the project directory [env: APOLLO_ROUTER_CONFIG_PATH=]
--dev
Enable development mode [env: APOLLO_ROUTER_DEV=]
-s, --supergraph
Schema location relative to the project directory [env: APOLLO_ROUTER_SUPERGRAPH_PATH=]
--apollo-uplink-endpoints
The endpoints (comma separated) polled to fetch the latest supergraph schema [env: APOLLO_UPLINK_ENDPOINTS=]
--apollo-uplink-poll-interval
The time between polls to Apollo uplink. Minimum 10s [env: APOLLO_UPLINK_POLL_INTERVAL=] [default: 10s]
--anonymous-telemetry-disabled
Disable sending anonymous usage information to Apollo [env: APOLLO_TELEMETRY_DISABLED=]
--apollo-uplink-timeout
The timeout for an http call to Apollo uplink. Defaults to 30s [env: APOLLO_UPLINK_TIMEOUT=] [default: 30s]
--listen
The listen address for the router. Overrides `supergraph.listen` in router.yaml [env: APOLLO_ROUTER_LISTEN_ADDRESS=]
-V, --version
Display version and exit
-h, --help
Print help
Apollo crée des outils open source et des services commerciaux pour rendre le développement d'applications plus facile, meilleur et accessible à un plus grand nombre de personnes. Nous vous aidons à expédier plus rapidement avec :
Découvrez la plateforme d'apprentissage Odyssey, l'endroit idéal pour commencer votre parcours GraphQL avec des vidéos et des défis de code interactifs. Rejoignez la communauté Apollo pour interagir et obtenir l'aide technique de la communauté GraphQL.
Le développement d'Apollo Router Core est guidé par les principes de conception suivants qui éclairent les décisions d'architecture et la mise en œuvre.
Exactitude : le routeur s'efforce d'être l'implémentation la plus correcte de GraphQL et de Federation, nous nous soucions de tester et de documenter tout ce qu'implique la spécification, jusqu'aux cas de défaillance. Le comportement du routeur doit suivre le principe de la moindre surprise pour les développeurs.
Fiabilité : le routeur est un élément essentiel des API GraphQL, il doit donc être l'un des éléments les plus puissants de l'infrastructure. Cela implique une stabilité dans son comportement (pas de crash, de boucles infinies, de fuites, etc.), de disponibilité (latence prévisible, utilisation de la RAM et du CPU, évolutivité) et d'observabilité (métriques, alertes). Cela devrait donner aux responsables des infrastructures la certitude qu'ils peuvent connaître ses limites et l'exploiter en toute sécurité.
Expérimentation sécurisée : le routeur prendra en charge tous les futurs travaux autour de la Fédération, il doit donc permettre de nouvelles idées et explorations sans perturber les fonctionnalités existantes. Le projet est toujours en mouvement, nous ne pouvons pas le laisser se cristalliser trop tôt, tout en respectant les principes de justesse et de fiabilité.
Ergonomie : le routeur doit être simple à utiliser. Préférez l’extensibilité aux options de configuration et assurez-vous que l’utilisateur dispose de suffisamment d’informations pour s’aider lui-même en cas de problème. Par exemple:
Les principes suivants guident :
Testabilité unitaire : tout nouveau code doit être testable unitairement ou avoir une bonne raison pour laquelle il ne l'est pas. Cela peut impliquer de consacrer un peu plus de temps pour garantir que le code est testable de manière isolée. Ne vous fiez pas uniquement aux tests d’intégration.
Suite de tests d'intégration : nous intégrerons la suite de tests de la passerelle et contribuerons à son amélioration pour tester tous les aspects des spécifications. En particulier, cette suite de tests vérifiera les cas d'échec comme les requêtes invalides ou les problèmes de réseau. Les tests d'intégration doivent être à toute épreuve et ne doivent pas échouer en cas d'exécution lente des tests ou de conditions de concurrence.
Mesure et apprentissage : la fiabilité doit être testée et mesurée, au moyen de benchmarks, de profilages et d'exploration des limites du routeur. Nous voulons apprendre comment faire fonctionner le routeur et quel est son point nominal. À cette fin, le routeur sera instrumenté en détail, ce qui nous permettra de mesurer l'impact des changements de code sur lui. Nous veillons particulièrement à mesurer la surcharge des nouvelles fonctionnalités, afin de minimiser la latence et l'utilisation des ressources.
Extensibilité : en autorisant les extensions et les directives à modifier le comportement du routeur, nous pouvons exécuter des expériences et tester de nouvelles fonctionnalités sans impacter les requêtes ou les points de terminaison spécifiques. De plus, ces expériences sont faciles à désactiver au moment de l'exécution (indicateurs de fonctionnalités, canaris, etc.).
ApolloGraph, Inc.
Le code source de ce référentiel est couvert par la licence Elastic 2.0. La valeur par défaut dans tout le référentiel est une licence sous Elastic License 2.0, sauf si un en-tête de fichier ou un fichier de licence dans un sous-répertoire spécifie une autre licence. Voir la LICENCE pour le texte complet de la licence.