O Apollo Router Core é um roteador gráfico configurável e de alto desempenho escrito em Rust para executar um supergrafo federado que usa Apollo Federation 2.
O Apollo Router Core é bem testado, avaliado regularmente, inclui a maioria dos principais recursos do Apollo Gateway e é capaz de atender cargas de trabalho em escala de produção.
Novos lançamentos e suas notas de lançamento (juntamente com notas sobre quaisquer alterações importantes) podem ser encontrados na página Lançamentos, e o lançamento mais recente sempre pode ser encontrado na página mais recente. O CHANGELOG.md
na raiz deste repositório também contém alterações não lançadas , além do histórico completo de alterações.
Atualmente, publicamos novos lançamentos a cada 1 ou 2 semanas.
Siga o tutorial de início rápido para começar a usar o roteador.
Consulte a documentação para obter mais detalhes.
O Apollo Router Core requer que um arquivo supergráfico seja passado como o argumento --supergraph
e um arquivo de configuração opcional. a ser fornecido. Eles estão localizados no diretório atual ou especificados explicitamente por meio de sinalizador, por um caminho absoluto ou por um caminho relativo ao diretório atual.
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
A Apollo cria ferramentas de código aberto e serviços comerciais para tornar o desenvolvimento de aplicativos mais fácil, melhor e acessível a mais pessoas. Ajudamos você a enviar mais rápido com:
Confira a plataforma de aprendizagem Odyssey, o lugar perfeito para começar sua jornada GraphQL com vídeos e desafios de código interativos. Junte-se à comunidade Apollo para interagir e obter ajuda técnica da comunidade GraphQL.
O desenvolvimento do Apollo Router Core é orientado pelos seguintes princípios de design que informam as decisões e implementação da arquitetura.
Correção: o roteador se esforça para ser a implementação mais correta do GraphQL e da Federação, nos preocupamos em testar e documentar tudo o que está implícito na especificação, até os casos de falha. O comportamento do roteador deve seguir o princípio da menor surpresa para os desenvolvedores.
Confiabilidade: o roteador é uma parte crítica das APIs GraphQL, portanto deve ser uma das partes mais fortes da infraestrutura. Isso implica estabilidade em seu comportamento (sem travamentos, loops infinitos, vazamentos, etc), disponibilidade (latência previsível, uso de RAM e CPU, escalabilidade) e observabilidade (métricas, alertas). Deverá dar uma forte confiança ao pessoal da infra-estrutura de que poderão conhecer os seus limites e operá-la com segurança.
Experimentação segura: o roteador apoiará todo o trabalho futuro em torno da Federação, portanto deve permitir novas ideias e explorações sem perturbar os recursos existentes. O projeto ainda está em andamento, não podemos permitir que ele se cristalize tão cedo, seguindo ainda os princípios de correção e confiabilidade.
Usabilidade: o roteador deve ser simples de operar. Prefira a extensibilidade às opções de configuração e garanta que o usuário tenha informações suficientes para se ajudar quando algo der errado. Por exemplo:
Os seguintes princípios orientam:
Testabilidade de unidade: todo novo código deve ser testável em unidade ou ter uma boa razão para não ser. Isso pode significar gastar um pouco mais de tempo para garantir que o código possa ser testado isoladamente. Não confie apenas em testes de integração.
Conjunto de testes de integração: faremos a integração com o conjunto de testes do gateway e ajudaremos a melhorá-lo para testar todos os aspectos das especificações. Em particular, este conjunto de testes verificará casos de falha, como consultas inválidas ou problemas de rede. Os testes de integração devem ser à prova de balas e não devem falhar no caso de execução lenta do teste ou condições de corrida.
Medição e aprendizagem: a confiabilidade deve ser testada e medida, por meio de benchmarks, criação de perfis e exploração dos limites do roteador. Queremos aprender como operar o roteador e qual o seu ponto nominal. Para tanto, o roteador deve ser instrumentado detalhadamente, permitindo-nos medir como as alterações no código o afetam. Cuidamos especialmente de medir a sobrecarga de novos recursos, para minimizar a latência e o uso de recursos.
Extensibilidade: ao permitir que extensões e diretivas modifiquem o comportamento do roteador, podemos realizar experimentos e testar novos recursos sem impactar consultas ou endpoints específicos. Além disso, esses experimentos são fáceis de desativar em tempo de execução (sinalizadores de recursos, canários, etc.).
Apolo gráfico, Inc.
O código-fonte neste repositório é coberto pela Elastic License 2.0. O padrão em todo o repositório é uma licença sob a Elastic License 2.0, a menos que um cabeçalho de arquivo ou um arquivo de licença em um subdiretório especifique outra licença. Consulte a LICENÇA para obter o texto completo da licença.