Der Apollo Router Core ist ein konfigurierbarer, leistungsstarker Graph-Router, der in Rust geschrieben wurde, um einen föderierten Supergraphen auszuführen, der Apollo Federation 2 verwendet.
Apollo Router Core ist umfassend getestet, wird regelmäßig einem Benchmarking unterzogen, umfasst die meisten wichtigen Funktionen von Apollo Gateway und ist in der Lage, Workloads im Produktionsmaßstab zu bedienen.
Neue Versionen und ihre Versionshinweise (zusammen mit Hinweisen zu wichtigen Änderungen) finden Sie auf der Seite „Releases“, und die neueste Version finden Sie immer auf der neuesten Seite. Die CHANGELOG.md
im Stammverzeichnis dieses Repositorys enthält neben dem vollständigen Änderungsverlauf auch unveröffentlichte Änderungen.
Derzeit veröffentlichen wir alle 1–2 Wochen neue Veröffentlichungen.
Befolgen Sie das Schnellstart-Tutorial, um den Router in Betrieb zu nehmen.
Weitere Einzelheiten finden Sie in der Dokumentation.
Apollo Router Core erfordert die Übergabe einer Supergraph-Datei als Argument --supergraph
und einer optionalen Konfigurationsdatei. geliefert werden. Diese befinden sich entweder im aktuellen Verzeichnis oder werden explizit per Flag angegeben, entweder durch einen absoluten Pfad oder einen Pfad relativ zum aktuellen Verzeichnis.
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 entwickelt Open-Source-Tools und kommerzielle Dienste, um die Anwendungsentwicklung einfacher, besser und für mehr Menschen zugänglich zu machen. Wir helfen Ihnen, schneller zu versenden mit:
Schauen Sie sich die Odyssey-Lernplattform an, den perfekten Ort, um Ihre GraphQL-Reise mit Videos und interaktiven Code-Herausforderungen zu beginnen. Treten Sie der Apollo-Community bei, um mit der GraphQL-Community zu interagieren und technische Hilfe von ihr zu erhalten.
Die Entwicklung des Apollo Router Core basiert auf den folgenden Designprinzipien, die Architekturentscheidungen und Implementierung beeinflussen.
Korrektheit: Der Router strebt danach, die korrekteste Implementierung von GraphQL und Federation zu sein. Wir kümmern uns darum, alles zu testen und zu dokumentieren, was in der Spezifikation enthalten ist, bis hin zu Fehlerfällen. Das Verhalten des Routers sollte dem Prinzip der geringsten Überraschung für Entwickler folgen.
Zuverlässigkeit: Der Router ist ein wichtiger Teil der GraphQL-APIs und muss daher einer der stärksten Teile der Infrastruktur sein. Dies impliziert Stabilität in seinem Verhalten (keine Abstürze, Endlosschleifen, Lecks usw.), Verfügbarkeit (vorhersehbare Latenz, RAM- und CPU-Auslastung, Skalierbarkeit) und Beobachtbarkeit (Metriken, Warnungen). Es sollte den Infrastrukturverantwortlichen starkes Vertrauen geben, dass sie ihre Grenzen kennen und sie sicher betreiben können.
Sicheres Experimentieren: Der Router wird alle zukünftigen Arbeiten rund um Federation unterstützen, daher muss er neue Ideen und Erkundungen ermöglichen, ohne bestehende Funktionen zu beeinträchtigen. Das Projekt ist noch in Bewegung, wir dürfen nicht zulassen, dass es sich zu früh herauskristallisiert und dabei weiterhin den Grundsätzen der Korrektheit und Verlässlichkeit folgt.
Benutzerfreundlichkeit: Der Router muss einfach zu bedienen sein. Ziehen Sie Erweiterbarkeit den Konfigurationsoptionen vor und stellen Sie sicher, dass der Benutzer über genügend Informationen verfügt, um sich selbst zu helfen, wenn etwas schief geht. Zum Beispiel:
Die folgenden Grundsätze leiten:
Unit-Testbarkeit: Jeder neue Code sollte Unit-testbar sein oder einen guten Grund haben, warum dies nicht der Fall ist. Dies kann bedeuten, dass Sie etwas mehr Zeit aufwenden müssen, um sicherzustellen, dass der Code isoliert testbar ist. Verlassen Sie sich nicht ausschließlich auf Integrationstests.
Integrationstestsuite: Wir integrieren die Testsuite des Gateways und helfen bei deren Verbesserung, um alle Aspekte der Spezifikationen zu testen. Diese Testsuite überprüft insbesondere Fehlerfälle wie ungültige Abfragen oder Netzwerkprobleme. Integrationstests müssen kugelsicher sein und dürfen bei langsamer Testausführung oder Rennbedingungen nicht fehlschlagen.
Messen und Lernen: Die Zuverlässigkeit muss durch Benchmarks, Profiling und die Erkundung der Grenzen des Routers getestet und gemessen werden. Wir wollen lernen, wie man den Router bedient und was sein Nennpunkt ist. Zu diesem Zweck soll der Router detailliert instrumentiert werden, sodass wir messen können, wie sich Codeänderungen auf ihn auswirken. Wir achten insbesondere auf die Messung des Overheads neuer Funktionen, um Latenz und Ressourcenverbrauch zu minimieren.
Erweiterbarkeit: Indem wir Erweiterungen und Anweisungen zulassen, um das Verhalten des Routers zu ändern, können wir Experimente durchführen und neue Funktionen testen, ohne bestimmte Abfragen oder Endpunkte zu beeinträchtigen. Darüber hinaus können diese Experimente zur Laufzeit einfach deaktiviert werden (Feature Flags, Canaries usw.).
Apollo Graph, Inc.
Der Quellcode in diesem Repository unterliegt der Elastic License 2.0. Der Standardwert im gesamten Repository ist eine Lizenz unter der Elastic License 2.0, es sei denn, ein Dateiheader oder eine Lizenzdatei in einem Unterverzeichnis gibt eine andere Lizenz an. Den vollständigen Lizenztext finden Sie in der LIZENZ.