Apollo Router Core es un enrutador de gráficos configurable y de alto rendimiento escrito en Rust para ejecutar un supergrafo federado que utiliza Apollo Federation 2.
Apollo Router Core está bien probado, se compara periódicamente, incluye la mayoría de las funciones principales de Apollo Gateway y es capaz de atender cargas de trabajo a escala de producción.
Las nuevas versiones y sus notas de versión (junto con notas sobre cualquier cambio importante) se pueden encontrar en la página Lanzamientos, y la última versión siempre se puede encontrar en la página más reciente. CHANGELOG.md
en la raíz de este repositorio también contiene cambios no publicados además del historial completo de cambios.
Actualmente, publicamos nuevos lanzamientos cada 1 o 2 semanas.
Siga el tutorial de inicio rápido para comenzar a utilizar el enrutador.
Consulte la documentación para obtener más detalles.
Apollo Router Core requiere que se pase un archivo supergraph como argumento --supergraph
y un archivo de configuración opcional. para ser suministrado. Estos se encuentran en el directorio actual o se especifican explícitamente mediante un indicador, ya sea mediante una ruta absoluta o una ruta relativa al directorio actual.
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 crea herramientas de código abierto y servicios comerciales para hacer que el desarrollo de aplicaciones sea más fácil, mejor y accesible para más personas. Le ayudamos a realizar envíos más rápido con:
Consulte la plataforma de aprendizaje Odyssey, el lugar perfecto para comenzar su viaje GraphQL con videos y desafíos de código interactivos. Únase a la comunidad Apollo para interactuar y obtener ayuda técnica de la comunidad GraphQL.
El desarrollo del Apollo Router Core está impulsado por los siguientes principios de diseño que informan las decisiones y la implementación de la arquitectura.
Corrección: el router se esfuerza por ser la implementación más correcta de GraphQL y Federation, nos preocupamos por probar y documentar todo lo que implica la especificación, hasta los casos de falla. El comportamiento del enrutador debe seguir el principio de mínima sorpresa para los desarrolladores.
Fiabilidad: el enrutador es una parte crítica de las API GraphQL, por lo que debe ser una de las partes más sólidas de la infraestructura. Esto implica estabilidad en su comportamiento (sin fallas, bucles infinitos, fugas, etc.), disponibilidad (latencia predecible, uso de RAM y CPU, escalabilidad) y observabilidad (métricas, alertas). Debería dar a los responsables de la infraestructura una gran confianza en que pueden conocer sus límites y operarla de forma segura.
Experimentación segura: el enrutador admitirá todo el trabajo futuro en torno a la Federación, por lo que debe permitir nuevas ideas y exploraciones sin alterar las funciones existentes. El proyecto todavía está en marcha, no podemos permitir que cristalice demasiado pronto, respetando los principios de corrección y fiabilidad.
Usabilidad: el router debe ser sencillo de manejar. Prefiera la extensibilidad a las opciones de configuración y asegúrese de que el usuario tenga suficiente información para ayudarse cuando algo salga mal. Por ejemplo:
Los siguientes principios guían:
Capacidad de prueba unitaria: todo el código nuevo debe ser comprobable por unidad o tener una buena razón por la cual no lo es. Esto puede significar dedicar un poco más de tiempo para garantizar que el código se pueda probar de forma aislada. No confíe únicamente en las pruebas de integración.
Conjunto de pruebas de integración: nos integraremos con el conjunto de pruebas de la puerta de enlace y ayudaremos a mejorarlo para probar todos los aspectos de las especificaciones. En particular, este conjunto de pruebas verificará casos de falla, como consultas no válidas o problemas de red. Las pruebas de integración deben ser a prueba de balas y no deben fallar en el caso de una ejecución lenta de la prueba o condiciones de carrera.
Medición y aprendizaje: la confiabilidad debe probarse y medirse mediante evaluaciones comparativas, elaboración de perfiles y exploración de los límites del enrutador. Queremos aprender cómo operar el enrutador y cuál es su punto nominal. Para ello, se instrumentará detalladamente el router, permitiéndonos medir cómo le afectan los cambios de código. Nos encargamos especialmente de medir la sobrecarga de las nuevas funciones, para minimizar la latencia y el uso de recursos.
Extensibilidad: al permitir que extensiones y directivas modifiquen el comportamiento del enrutador, podemos ejecutar experimentos y probar nuevas funciones sin afectar consultas o puntos finales específicos. Además, estos experimentos son fáciles de desactivar en tiempo de ejecución (indicadores de funciones, canarios, etc.).
Gráfico de Apolo, Inc.
El código fuente de este repositorio está cubierto por la Licencia Elastic 2.0. El valor predeterminado en todo el repositorio es una licencia bajo Elastic License 2.0, a menos que un encabezado de archivo o un archivo de licencia en un subdirectorio especifique otra licencia. Consulte la LICENCIA para obtener el texto completo de la licencia.