GraphQL é uma especificação de Query Language para APIs baseada no conceito de grafos. Um grafo, possui vários pontos, chamados de nó e ligados uns aos outros. Cada nó pode ser entendido como um recurso do sistema. Um recurso pode ser um usuário, um cliente, uma pessoa e outro recurso pode ser o país do usuário, a peça fornecida pelo fornecedor, e assim por diante.

Dessa forma, o GraphQL permite a ligação entre recursos do sistema em forma de grafo.

O GraphQL também permite que as interfaces de usuário (clientes) interajam declarativamente com dados e as isolem de como esses dados são resolvidos no servidor. Quem controla quais informações são necessárias é o cliente e não mais o servidor, conforme estamos acostumados com o REST.

GraphQL é agnóstico de banco de dados, isso significa que você pode utilizar qualquer banco de dados em sua API.

Que problemas o GraphQL resolve?

Criada pela equipe do Facebook, em 2012, GraphQL começou a ser usada em seus aplicativos e, em 2015, a especificação se tornou open source e várias empresas adotaram a tecnologia, desde então.

Hoje em dia, muitas empresas usam o GraphQL, como Facebook, Amazon, GitHub, Twitter, PayPal, The New York Times, KLM, GetNinjas, Dailymotion, Shopify e Pinterest. Até a própria Netflix, que possui um projeto próprio, chamado Falcor, hoje em dia também utiliza o GraphQL.

Segundo Lee Byron, um dos desenvolvedores do GraphQL, o problema que o Facebook enfrentava – e que serviu de motivação para criar a solução – era obter os dados necessários para o feed de notícias em dispositivos móveis, e usando conexões de rede lentas.

Dentro de cada post tinha que vir uma lista dos usuários que curtiram. Dentro de cada objeto de usuário tem que vir o nome, foto do perfil, link para o perfil, se o usuário já é seu amigo, etc.

Ao invés de ter que ficar criando uma API para cada estrutura diferente de dados e depois juntar esses dados, que tal simplesmente dizer a “alguém” o que você precisa? Esse “alguém” é o GraphQL.

Benefícios

Alguns benefícios que uso do GraphQL pode trazer:

Performance

Ao utilizar o GraphQL as requisições se tornam mais rápidas, pois o payload trafegado na rede é reduzido. Afinal, serão enviadas apenas as informações necessárias.

Em um cenário com REST, podemos precisar de mais de uma requisição para retornar as informações necessárias. Sendo assim, o GraphQL tem um ganho para as aplicações e esse ganho é ainda maior em redes mais lentas ou limitadas como as redes móveis, por exemplo.

Versionless

No GraphQL temos o conceito de ser versionless, ou seja, sem controle de versão para a API, bastando estender o Schema para adicionar novas informações sem impactar as aplicações antigas, que não utilizarão essas informações.

Caso seja necessário remover um atributo futuramente, basta colocá-lo como deprecated indicando qual novo atributo deve ser usado e futuramente não haverá mais o atributo deprecated no Schema.

Princípios Segundo a empresa Apollo

A empresa Apollo estima que seu framework seja utilizado em mais de 90% das implementações de GraphQL e eles possuem alguns princípios de boas práticas que listei abaixo:

Princípios de Integridade: Garantir que o Schema GraphQL seja bem definido, estável e consistente.

  1. GraphQL Schema único — A empresa deve possuir um GraphQL Schema unificado, ao invés de um por equipe.
  2. Implementação compartilhada — A implementação do GraphQL Schema deve ser compartilhada entre as equipes/times.
  3. Rastreie o Schema em Registros — Deve haver uma única fonte verdadeira para rastrear o GraphQL Schema.

Princípios de Agilidade: Distribuir e adaptar-se rapidamente às mudanças necessárias.

  1. Schema Abstrato e Orientado à Demanda — O esquema deve agir como uma camada de abstração que fornece flexibilidade aos consumidores, ocultando os detalhes da implementação.
  2. Abordagem Ágil para o desenvolvimento dos Schemas — O esquema deve ser construído de forma incremental com base nos requisitos reais e evoluir ao longo do tempo.
  3. Melhorar o Desempenho de forma Iterativa — O gerenciamento de desempenho deve ser um processo contínuo, adaptando-se às mudanças nas cargas de consulta e nas implementações de serviços.
  4. Use os Metadados para Capacitar os Desenvolvedores — Os desenvolvedores devem ter conhecimento da API GraphQL durante todo o processo de desenvolvimento.

Princípios de Operação: Implementar a API GraphQL com segurança para produção.

  1. Acesso e Controle de Demanda — Conceda acesso por cliente e gerencie o que e como poderão acessá-lo.
  2. Log Estruturado — Capture logs estruturados de todas as operações e aproveite-os como ferramenta para entender o uso da API GraphQL.
  3. Separe a Camada GraphQL da Camada de Serviço — Adote uma arquitetura em camadas com a funcionalidade da API GraphQL em uma camada separada, em vez de ser incorporada em todos os serviços.

5 motivos para adotar GraphQL em seus projetos

  1. GraphQL possui Schema fortemente tipado — O GraphQL Schema é a “espinha dorsal” da API GraphQL, ele define as operações (queriesmutations e subscriptions) suportadas pela API, incluindo argumentos de entrada e respostas. Pode-se dizer que o Schema é o contrato entre o cliente e a API.
  2. Não há mais overfetching ou underfetching — Como o cliente diz quais dados ele precisa receber, os problemas de receber dados desnecessários (overfetching) ou precisar de mais de uma requisão por não ter todos os dados em apenas uma chamada (underfetching) são solucionados e esse é considerado um dos maiores benefícios do GraphQL.
  3. GraphQL permite o desenvolvimento rápido de produtos — Existe um ganho muito grande, principalmente para equipes de frontend. Com GraphQL é possível redesenhar completamente a UI de um frontend sem ter que alterar nada no backend. Com GraphQL Faker os times de frontend ainda podem utilizar mocks das APIs.
  4. APIs GraphQL Compostas — O Schema permite combinar e mesclar várias APIs GraphQL em apenas uma. Semelhante aos componentes React que podem ser compostos por componentes existentes, A API GraphQL pode ser composta de outras APIs. Isso é extremamente benéfico para os clientes, caso contrários teriam que acessar vários endpoints de API GraphQL.
  5. Ecossistema de código-aberto e uma comunidade incrível — GraphQL foi oficialmente lançado pelo Facebook em 2012 e se tornou open source em 2015, um tempo bem curto, e mesmo assim é incrível o quanto todo o ecossistema GraphQL amadureceu, desde então.

Referências:

GraphQL: A query language for APIs.

How to GraphQL – The Fullstack Tutorial for GraphQL

Principled GraphQL

Top 5 Reasons to Use GraphQL | Prisma