O que é GraphQL e como ele difere do REST?
Juliano Santos
11 de jan de 2024
GraphQL é uma linguagem de consulta para APIs e um tempo de execução para atender a essas consultas com os dados existentes. Ao contrário do REST, o GraphQL oferece uma descrição completa e compreensível dos dados em sua API, permitindo que os clientes solicitem exatamente o que precisam e nada mais. Neste artigo, exploraremos as principais diferenças entre GraphQL e REST, analisando como eles lidam com a busca de dados em uma API.
REST API: A busca de dados tradicional
Ao usar uma API REST, geralmente é necessário acessar vários endpoints para obter os dados necessários. Vamos considerar um exemplo de um aplicativo de blog onde precisamos exibir os títulos das postagens de um usuário específico, bem como os nomes dos últimos três seguidores desse usuário.
Com uma API REST, normalmente faríamos três solicitações a diferentes endpoints para buscar os dados necessários. Primeiro, acessaríamos o endpoint /users/<id>
para obter os dados iniciais do usuário. Em seguida, provavelmente teríamos um endpoint /users/<id>/posts
que retorna todas as postagens desse usuário. Por fim, teríamos um endpoint /users/<id>/followers
que retorna uma lista de seguidores por usuário.
O problema com esse método é que estamos fazendo várias solicitações a diferentes endpoints e recuperando mais informações do que realmente precisamos. Isso é conhecido como "overfetching" (busca excessiva).
GraphQL: Uma maneira mais eficiente de buscar dados
Com o GraphQL, podemos simplificar todo o processo de busca de dados em uma única consulta. Em vez de fazer várias solicitações a diferentes endpoints, enviamos uma única consulta para o servidor GraphQL, incluindo nossos requisitos de dados concretos.
Usando o GraphQL, o cliente pode especificar exatamente os dados que precisa em uma consulta. A estrutura da resposta do servidor segue precisamente a estrutura aninhada definida na consulta.
Dessa forma, evitamos o problema de "overfetching" e garantimos que recebemos apenas os dados necessários. Além disso, o GraphQL permite que o cliente busque recursos relacionados em uma única solicitação, sem a necessidade de acessar vários endpoints.
Acabando com o "overfetching" e "underfetching"
Um dos principais problemas do REST é o "overfetching" e "underfetching" de dados. O "overfetching" acontece quando o cliente baixa mais informações do que realmente precisa. Por exemplo, se um aplicativo precisa exibir apenas os nomes dos usuários, mas a resposta da API REST contém informações adicionais, como endereços ou datas de nascimento. Nesse caso, estamos baixando mais dados do que o necessário.
Já o "underfetching" ocorre quando um endpoint específico não fornece informações suficientes e o cliente precisa fazer solicitações adicionais para obter todos os dados necessários. Isso pode levar a um problema conhecido como "n+1 requests", onde o cliente precisa fazer uma solicitação adicional para cada elemento retornado.
O GraphQL resolve esses problemas, permitindo que o cliente especifique exatamente quais informações ele precisa. Com o GraphQL, não há mais "overfetching" ou "underfetching" de dados, pois o cliente pode buscar todos os dados necessários em uma única consulta.
Benefícios de um sistema de tipo e esquema
O GraphQL utiliza um sistema de tipo forte para definir as capacidades de uma API. Todos os tipos expostos em uma API são descritos em um esquema usando a Linguagem de Definição de Esquema do GraphQL (SDL). Esse esquema serve como um contrato entre o cliente e o servidor, definindo como o cliente pode acessar os dados.
Uma vez que o esquema é definido, as equipes que trabalham no frontend e no backend podem fazer seu trabalho sem a necessidade de comunicação adicional, pois ambos conhecem a estrutura definitiva dos dados enviados pela rede. As equipes de frontend podem testar facilmente suas aplicações simulando as estruturas de dados necessárias. Quando o servidor estiver pronto, o cliente poderá carregar os dados da API real.
Além disso, o GraphQL permite que o backend tenha insights detalhados sobre os dados solicitados. Como cada cliente especifica exatamente quais informações estão interessadas, é possível entender como os dados disponíveis estão sendo usados. Isso pode ser útil para evoluir uma API e descontinuar campos específicos que não são mais solicitados pelos clientes.
Evolução do API sem versões
Outro benefício do GraphQL é que podemos evoluir uma API sem a necessidade de criar versões diferentes. Com o REST, geralmente precisamos criar novos endpoints para adicionar campos ou tipos adicionais, o que pode levar a uma API confusa com várias versões.
Com o GraphQL, podemos adicionar novos campos e tipos à nossa API sem impactar as consultas existentes. Os campos antigos podem ser descontinuados sem afetar as consultas existentes. Dessa forma, o GraphQL permite que nossas aplicações tenham acesso contínuo a novos recursos, sem a necessidade de criar versões diferentes da API.
Conclusão
O GraphQL oferece uma maneira mais eficiente e flexível de buscar dados em uma API em comparação com o REST. Com o GraphQL, podemos buscar apenas os dados necessários em uma única consulta, evitando "overfetching" e "underfetching". Além disso, o GraphQL permite que nossas APIs evoluam continuamente sem a necessidade de criar versões diferentes.
Portanto, se você está construindo uma API e deseja fornecer uma experiência mais eficiente e flexível para seus clientes, considere usar o GraphQL em vez do REST. Com o GraphQL, você pode oferecer aos seus clientes exatamente o que eles precisam, sem sobrecarregar o servidor e sem a necessidade de várias solicitações.
Experimente o GraphQL e aproveite todos os benefícios que essa tecnologia tem a oferecer!