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. Assim, um recurso pode ser um usuário, um cliente, uma pessoa, ou, o país do usuário, a peça fornecida pelo fornecedor, e assim por diante. Desta 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.

Além disso, o GraphQL é agnóstico de banco de dados. Isso significa que você pode utilizar qualquer banco de dados em sua API.

Quais 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, permitindo que várias empresas adotassem 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, usando conexões de rede lentas. Dentro de cada post tinha que vir uma lista dos usuários que curtiram e, dentro de cada objeto de usuário, deveria vir o nome, foto e link do perfil, além da informação 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

A seguir veremos alguns dos 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, sendo este 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. Para isso, basta 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, possuindo alguns princípios de boas práticas, listadas 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 as pessoas Desenvolvedoras — As pessoas desenvolvedoras 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, ao invés desta 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 pois, caso contrário, 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:

Show CommentsClose Comments

Deixe seu comentário