Pontos principais
- GraphQL é uma linguagem de consulta de API de código aberto. Ela permite que os clientes solicitem exatamente os dados de que precisam por meio de um único endpoint.
- Uma API GraphQL é formada por componentes como schemas, resolvers, queries e mutations, que definem quais dados podem ser acessados, como são recuperados e como podem ser alterados.
- GraphQL consolida várias fontes de dados em um único endpoint que responde a consultas estruturadas e definidas pelo cliente.
- GraphQL se encaixa melhor em ambientes de dados complexos e flexíveis, como aplicativos móveis, painéis internos e portais de clientes.
- GraphQL traz várias considerações de segurança: aplicação de autenticação, limite de profundidade das consultas, controle de introspecção e governança de schema.
- Organizações com padrões de recursos simples e previsíveis ou com pouca capacidade de governança de TI podem concluir que REST atende às suas necessidades com menos sobrecarga operacional.
GraphQL é uma linguagem de consulta usada para criar APIs que permitem aos aplicativos solicitar dados de sistemas de backend. Em vez de devolver uma resposta fixa a partir de um endpoint predefinido, GraphQL deixa o cliente descrever exatamente os dados de que precisa.
Essa flexibilidade reduz transferências desnecessárias de dados e simplifica as interações com a API. Mas não é uma solução perfeita, já que também traz considerações operacionais. Equipes de TI, desenvolvedores e times de automação precisam entender como funcionam as queries, os schemas, as mutations e os resolvers antes de adotar ou dar suporte a APIs GraphQL.
O que é GraphQL?
GraphQL é uma linguagem de consulta de código aberto e uma especificação de runtime para APIs. Ela permite que os clientes solicitem campos específicos definidos em um schema. Normalmente, uma API GraphQL expõe um único endpoint, no qual os clientes enviam consultas estruturadas, e a API recupera os dados solicitados dos sistemas subjacentes.
É comum usá-la quando os aplicativos precisam de acesso flexível aos dados ou quando os clientes precisam de estruturas de resposta diferentes. Alguns usos de GraphQL incluem:
- Aplicações web
- Aplicativos móveis
- Painéis internos
- Portais de clientes
- Camadas de agregação de APIs
- Qualquer sistema que combine dados de vários serviços de backend
Como funciona uma API GraphQL
Uma API GraphQL funciona como interface entre os clientes e os sistemas de backend. Em geral, ela expõe um único endpoint para o envio de consultas, recupera e combina dados de uma ou mais fontes subjacentes e, então, devolve a resposta.
Uma API GraphQL depende de alguns componentes centrais para funcionar.
- Schema: é a definição de uma API GraphQL. Especifica os tipos de dados disponíveis, os campos, as relações e as operações (queries e mutations) que os clientes podem executar.
- Sistema de tipos: define os tipos e as estruturas de dados usados pelo schema GraphQL, indicando como os dados são representados e relacionados dentro da API.
- Query: é a requisição estruturada que um cliente envia a uma API GraphQL para recuperar dados. A query costuma refletir a estrutura da resposta que o cliente espera receber.
- Resolver: funciona como buscador de dados, conectando o que está definido no schema ao que existe nas fontes de dados. Assim, a API consegue devolver o valor correto que o cliente pediu.
- Mutation: permite alterar dados nas fontes por meio da API GraphQL, o que inclui criar, atualizar ou excluir informações.
- Endpoint: é o ponto de acesso da API onde os clientes enviam as consultas GraphQL. A API processa essas consultas e devolve a resposta ao cliente.
Numa API GraphQL, o schema e o sistema de tipos definem as estruturas de dados e as operações disponíveis. O cliente envia uma query ao endpoint GraphQL e os resolvers recuperam ou geram os dados solicitados. Quando o cliente precisa executar uma operação que muda o estado da aplicação, ele usa uma mutation, executada pela API GraphQL.
O que faz uma query GraphQL?
Uma query GraphQL é uma mensagem do cliente que diz à API exatamente o que ela precisa fazer. Por exemplo, um aplicativo móvel precisa do nome de usuário, do endereço de e-mail e dos dispositivos atribuídos. Para obter essas informações, ele envia uma query que solicita tudo isso em uma única mensagem. Se precisar apenas do nome de usuário e do e-mail, inclui só esses campos na query.
As queries GraphQL ajudam a reduzir o over-fetching, porque o cliente pede campos específicos, e podem reduzir o under-fetching, já que dados relacionados são recuperados em uma só consulta. Também evitam a filtragem no lado do cliente provocada por respostas amplas demais.
GraphQL em comparação
GraphQL e REST
Uma API Representational State Transfer (REST) organiza recursos em vários endpoints, e cada endpoint costuma expor uma estrutura de recurso predefinida. GraphQL, por outro lado, normalmente expõe uma interface de consulta que permite ao cliente solicitar campos específicos de uma ou mais fontes de dados subjacentes.
REST é, em geral, uma abordagem mais orientada pelo servidor; GraphQL, mais orientada pelo cliente. REST costuma funcionar bem em padrões de acesso a dados mais simples e previsíveis, enquanto GraphQL tende a render mais quando os clientes precisam de acesso flexível a dados relacionados ou de estruturas de resposta diferentes.
GraphQL e SQL
GraphQL e SQL são confundidos porque ambos envolvem consultas, mas são coisas bem diferentes. SQL é uma linguagem de consulta para bancos de dados relacionais, usada para recuperar, modificar e gerenciar os dados dentro do banco. Já GraphQL é uma linguagem de consulta para APIs. Ela define como os clientes podem solicitar dados de uma camada de API, que pode — mas não necessariamente — estar conectada a um banco SQL.
GraphQL e Microsoft Graph API
Apesar dos nomes parecidos, GraphQL e Microsoft Graph API não têm relação entre si. GraphQL é uma linguagem de consulta geral usada em APIs, enquanto a Microsoft Graph API é a API unificada da Microsoft, que dá acesso aos dados do Microsoft 365 e de outros serviços de nuvem relacionados.
Benefícios de GraphQL
GraphQL traz muitos benefícios, entre eles:
- Recuperação flexível de dados: o cliente pede apenas os dados de que precisa naquele momento.
- Menos idas e voltas à API: dados relacionados costumam vir em uma única query, o que reduz o número de requisições feitas pelo cliente.
- Estrutura de schema sólida: o schema da API define com clareza os dados disponíveis.
- Mais flexibilidade no frontend: clientes diferentes podem pedir formatos de dados diferentes, conforme a necessidade.
- Evolução da API: dá para adicionar campos sem precisar criar um endpoint novo a cada mudança.
- Suporte a agregação: uma API GraphQL oferece uma interface unificada para acessar dados de vários sistemas de backend.
Limitações e considerações operacionais de GraphQL
GraphQL não é uma solução perfeita. Veja algumas limitações e pontos a considerar antes de usá-la:
- Por questões de segurança, é preciso garantir que usuários e sistemas sejam devidamente verificados antes de acessar a API.
- Em consultas flexíveis, é necessário ter proteções que impeçam o usuário de acessar informações às quais não deveria ter acesso.
- É preciso controlar comportamentos de consulta excessivos ou abusivos para proteger os dados da organização.
- GraphQL pode exigir estratégias de cache específicas, que você precisa dominar antes da implementação.
- Os administradores devem acompanhar desempenho das consultas, erros, latência e padrões de uso.
- Antes de alterar o schema da API, confirme que as mudanças não quebram os clientes nem expõem dados desnecessários.
- É preciso ter visibilidade sobre quais consultas estão sendo executadas e como elas se comportam.
Quando usar GraphQL
GraphQL se encaixa bem quando o cliente precisa de formatos de dados diferentes a partir da mesma API ou quando os aplicativos pedem com frequência dados relacionados de várias fontes. Também vale quando os dados de backend vêm de várias origens ou quando é preciso reduzir o tamanho do payload. No fim das contas, GraphQL dá flexibilidade ao cliente: ele solicita campos e estruturas de resposta diferentes sem exigir mudanças na API a cada caso de uso.
Mas não é uma solução perfeita. Se os padrões de recursos são previsíveis, REST atende. Se a operação ainda é pequena, a equipe de TI pode não ter fôlego para manter a governança de schema e os controles de consulta. GraphQL existe para consultas complexas e flexíveis; se não é isso que você precisa, ela pode acrescentar uma camada desnecessária de complexidade.
Simplifique as consultas de dados com GraphQL
GraphQL é uma linguagem de consulta para APIs. Ela dá flexibilidade aos clientes, que solicitam campos e estruturas de resposta diferentes sem exigir mudanças na API a cada caso de uso.
Artigos relacionados: