A federação GraphQL é uma abordagem de arquitetura distribuída que permite que os desenvolvedores usem uma única API em vários serviços do GraphQL (ou seja, serviços escritos na linguagem de consulta de código aberto, GraphQL).
A federação divide o esquema (o contrato entre operações de back-end e front-end) em componentes e microsserviços mais gerenciáveis, permitindo que as equipes construam, implementem e gerenciem partes de um esquema de forma independente, enquanto mantêm um gráfico de dados unificado para interação dos clientes.
Em um ambiente GraphQL federado, um gateway GraphQL integra vários esquemas, também chamados de subgráficos ou serviços, em um único gráfico (ou roteador). Cada subgráfico define parte do esquema geral e lida com a lógica de negócios e a recuperação de dados para seus próprios tipos e campos. O gateway então une subgráficos independentes em um supergrafo, permitindo que os clientes consultem fontes de dados em todos os serviços como se estivessem interagindo com um único esquema GraphQL.
Antes da federação, um dos principais métodos para combinar vários esquemas do GraphQL era a união de esquemas, onde diferentes esquemas e resolvedores são combinados manualmente. Isso exigiu que os desenvolvedores definissem como os esquemas são mesclados e como os dados seriam unidos. E embora a união de esquemas oferecesse uma solução unificadora para o esquema GraphQL, ela também era complexa e propensa a erros, dificultando o gerenciamento.
Para resolver esses problemas e simplificar os processos de união de esquemas, os engenheiros por trás do Apollo, uma implementação de GraphQL para engenharia de produto e aplicativos, desenvolveram a federação Apollo. A federação Apollo introduziu as palavras-chave "key", "external", "requires" e "extends" para definir as conexões entre tipos em diferentes serviços. Os novos recursos de referências cruzadas permitiram que os desenvolvedores usassem um gateway Apollo para construir um gráfico de dados coeso, sem depender de uma lógica de união excessivamente complexa.
No entanto, a federação GraphQL Apollo não foi apenas um novo conjunto de ferramentas e bibliotecas. Também foi uma especificação de sistema que descrevia a arquitetura e como os serviços podem se comunicar para formar um gráfico distribuído. Isso permitiu que outras implementações e ferramentas adotassem os princípios da federação e ajudou a estabelecer um padrão para construir APIs GraphQL federadas.
Desde sua introdução, a federação GraphQL passou por diversas melhorias. A federação gerenciada, por exemplo, pode facilitar a coleta de métricas e permitir atualizações automáticas do gateway quando subgráficos mudam, tudo isso sem intervenção manual ou downtime do sistema.
Os avanços também incluem o desenvolvimento do Federation 21, uma inovação que simplificou a mesclagem de esquemas entre serviços e a execução de consultas, aumentou a modularidade para maior controle sobre a composição do esquema e melhorou a visibilidade de erros para facilitar o rastreamento e a depuração.
A federação Apollo representou um avanço significativo para a construção de ecossistemas de APIs simplificados, e continua sendo uma opção para empresas que procuram implementar arquiteturas federadas de TI.
Ainda assim, uma abordagem de federação baseada no Apollo restringe os desenvolvedores a uma implementação de um único fornecedor, já que ambientes federados com Apollo aceitam apenas diretivas e tipos definidos pelo Apollo ou tecnologias de back-end compatíveis com o Apollo. Em outras palavras, a federação Apollo muitas vezes limita a flexibilidade do sistema, mesmo com o surgimento de novas tecnologias.
Desenvolvedores que buscam otimizar a flexibilidade, mantendo a funcionalidade de camada unificada da federação Apollo, podem preferir a federação aberta. As abordagens de federação aberta permitem que os sistemas combinem dados de qualquer fornecedor ou tipo de API, incluindo APIs que não são de GraphQL. Usando ferramentas como o IBM API Connect, as empresas podem personalizar e escalar seus ativos de TI sem restrições de compatibilidade e continuar adotando inovações de várias comunidades tecnológicas.
O GraphQL ajuda os clientes a solicitar exatamente os dados de que precisam, sem provisionamento excessivo ou insuficiente de recursos, tornando-se uma excelente opção para empresas que desejam otimizar a eficiência operacional.
Dada sua flexibilidade, não é surpresa que o GraphQL esteja se tornando uma linguagem de consulta e tempo de execução cada vez mais popular para APIs2. No entanto, à medida que aplicativos de web e móveis se tornam mais sofisticados, implementar um único servidor GraphQL monolítico (e todas as suas dependências) pode se tornar inviável. A federação simplifica ecossistemas GraphQL, ajudando subgráficos separados a funcionarem como um único serviço coeso GraphQL.
Implementar uma arquitetura GraphQL federada envolve os seguintes processos principais:
Definir esquemas de subgráficos envolve identificar limites de domínio e decidir como esses limites devem interagir.
Em uma arquitetura federada, cada esquema de subgráfico representa uma parte específica do gráfico de dados geral; ele contém tipos, configurações, consultas, mutações e assinaturas que se aplicam a um serviço ou domínio. Um serviço de produto, por exemplo, pode ter um esquema de subgráfico que inclui tipos como produto e avaliação, enquanto um serviço de usuário pode ter tipos de usuário e perfil.
Os esquemas de subgráficos são definidos de maneira semelhante a um esquema GraphQL padrão, mas com a adição de diretivas específicas da federação. As diretivas da federação fornecem instruções sobre como um sistema estende entidades entre esquemas e como o gateway deve resolver campos específicos entre serviços. Elas também definem chaves para referência a entidades.
Como exemplo, a diretiva @key especifica os campos que identificam um tipo em gráficos federados; quando implementada, essa diretiva solicita que o gateway recupere uma entidade do serviço que possui o tipo especificado. A diretiva @extends indica que um tipo definido em um esquema de subgráfico estende um tipo originado em outro, facilitando a extensão de tipos (com campos adicionais) em outro serviço.
Serviços de subgráficos são serviços de back-end que implementam a lógica de negócios para as APIs correspondentes de subgráficos. Cada serviço de subgráfico define sua parte do gráfico de dados e lida com consultas e mutações relacionadas ao seu domínio. Seus respectivos resolvedores buscam dados associados das fontes apropriadas, bancos de dados ou APIs REST.
Os serviços de subgráficos também expõem seus endpoints GraphQL ao gateway de federação, que os utiliza para compor o esquema federado geral. É importante notar que esses serviços podem ser escritos em qualquer linguagem de programação, desde que a linguagem ofereça suporte ao GraphQL.
Gateways de federação orquestram a composição de esquemas e o planejamento de consultas. Com a ajuda de servidores de federação, os gateways ocultam os serviços de subgráficos individuais, apresentando uma API unificada ao cliente.
Para configurar um gateway de federação, as equipes geralmente especificam a localização de cada serviço de subgráfico e configuram a infraestrutura necessária para buscar esquemas, planejar consultas, executar e lidar com erros. Quando configurado, o gateway buscará continuamente os esquemas dos serviços de subgráficos para garantir que possui a versão mais recente do esquema federado.
Quando os serviços de subgráficos e o gateway de federação são configurados, os administradores implementam todo o sistema. Isso inclui provisionar hardware e recursos de nuvem, configurar pipelines de implementação, monitorar o desempenho do sistema e garantir alta disponibilidade de recursos.
Não é surpresa que o monitoramento em tempo real consistente seja vital para otimizar um ambiente GraphQL federado. O monitoramento atento permite que as equipes detectem e resolvam gargalos de desempenho, erros do sistema e downtime não planejado antes que criem problemas maiores. O monitoramento também permite o acompanhamento da integridade dos serviços de subgráficos e do gateway de federação.
A federação GraphQL representa um avanço significativo no desenvolvimento de APIs GraphQL para sistemas distribuídos em larga escala. Ela permite que as equipes trabalhem em diferentes partes de um esquema GraphQL de forma independente, enquanto integram seu trabalho sem dificuldades em uma API unificada, tudo isso sem interromper a experiência do usuário final.
A federação GraphQL também possui uma ampla variedade de casos de uso, desde a implementação de arquitetura de microsserviços e cache até o desenvolvimento de produtos e insights operacionais, e foi adotada por empresas como Netflix, Airbnb, GitHub e Expedia.
A federação GraphQL também facilita:
Em um ambiente federado, os desenvolvedores podem distribuir a responsabilidade por domínios de dados específicos em vários serviços, permitindo que eles orquestrem e dimensionem serviços individuais (e suas funções) de maneira mais ágil.
Como os serviços federados podem ser gerenciados de forma independente, os membros da equipe podem trabalhar em seus respectivos domínios sem interferir uns nos outros.
Diferentemente dos ambientes da API REST, a federação GraphQL permite que os clientes obtenham todos os recursos e dados de que precisam com uma única solicitação, eliminando redundâncias e otimizando a implementação de recursos.
Experimente o IBM® API Connect com uma avaliação sem custo ou converse sobre suas necessidades com os nossos especialistas. Se sua empresa está pronta para otimizar seu gerenciamento de APIs ou se você quiser saber mais, estamos à disposição para ajudar na sua transformação digital.
Descubra todo o potencial dos seus processos de integração com soluções impulsionadas por IA. Agende uma reunião com nossos especialistas ou explore a documentação de nossos produtos para começar.
Potencialize seus negócios com as soluções de mensagens seguras e de alto desempenho do IBM MQ. Comece sua avaliação sem custo ou fale com nossos especialistas para saber como o IBM MQ pode transformar suas operações.
Faça transferências de arquivos mais rápidas e seguras, de qualquer tamanho e distância. Experimente o IBM® Aspera hoje mesmo e simplifique os fluxos de trabalho dos seus dados com eficiência em alta velocidade.
Integre suas aplicações e automatize o trabalho com a plataforma de multinuvem híbrida IBM webMethods.
Libere o potencial dos negócios com as soluções de integração da IBM, conectando aplicações e sistemas para acessar dados críticos de forma rápida e segura.
Libere novos recursos e aumente a agilidade dos negócios com os serviços de consultoria em nuvem da IBM. Descubra como cocriar soluções, acelerar a transformação digital e otimizar o desempenho por meio de estratégias de nuvem híbrida e parcerias especializadas.
1 Apollo GraphQL Introduces Federation 2 to Get More Organizations to the Graph, BusinessWire, 3 de novembro de 2021.
2 Why GraphQL Needs an Open Federation Approach, The New Stack, 16 de novembro de 2023.
IBM web domains
ibm.com, ibm.org, ibm-zcouncil.com, insights-on-business.com, jazz.net, mobilebusinessinsights.com, promontory.com, proveit.com, ptech.org, s81c.com, securityintelligence.com, skillsbuild.org, softlayer.com, storagecommunity.org, think-exchange.com, thoughtsoncloud.com, alphaevents.webcasts.com, ibm-cloud.github.io, ibmbigdatahub.com, bluemix.net, mybluemix.net, ibm.net, ibmcloud.com, galasa.dev, blueworkslive.com, swiss-quantum.ch, blueworkslive.com, cloudant.com, ibm.ie, ibm.fr, ibm.com.br, ibm.co, ibm.ca, community.watsonanalytics.com, datapower.com, skills.yourlearning.ibm.com, bluewolf.com, carbondesignsystem.com