Adriano Lisboa Blog
Pensamentos, histórias e ideias.

O mínimo que você precisa saber sobre GraphQL para não passar vergonha em uma conversa

Prometo que vou te poupar um tempo com vídeos, artigos e livros condensando o básico que você precisa saber sobre GraphQL em um único artigo.

A utilização de REST para o consumo de APIs (as famosas RESTful APIs) é talvez hoje o padrão mais utilizado na indústria de software, com o protocolo HTTP, seus métodos e a especificação REST podemos ler informações de uma API utilizando o método GET, POST para a criação, PUT para alteração e DELETE para deleção. Tudo isso de forma natural, porém com o surgimento das SPAs (Single Page Applications) e o avanço das aplicações mobile, algumas empresas como o Facebook começaram a experimentar e desenvolver novas tecnologias para representação e consumo de dados e uma dessas tecnologias que surgiu foi o GraphQL.

Quero com esse artigo te fornecer o mínimo de informações para que você consiga entender do que se trata essa tecnologia, suas vantagens e desvantagens e com isso conseguir ter conversas mais ricas com sua equipe de desenvolvimento afim de entender se faz sentido a sua adoção.


O que é GraphQL?

Resumidamente, GraphQL é uma especificação open-source de uma linguagem de consulta criada pelo Facebook. Um dos maiores problemas atualmente na utilização de um endpoint REST é o client ter que consumir todas as informações que são fornecidas pelo servidor, e muitas vezes ter que fazer várias chamadas a endpoints distintos a fim de coletar todas as informações necessárias.

Com GraphQL, o cliente é quem decide quais informações ele quer consumir. Evitando o chamado over-fetching que é consumir muitas informações que você na realidade não precisa, e também o inverso que é o chamado under-fetching onde são necessárias várias chamadas a outros endpoints para se ter todas as informações necessárias, aumentando assim a banda de rede usada.

Query and Result of GraphQL
Figura 1: Exemplo de Query e Resposta do GraphQL - Cortesia: https://code.fb.com


História

Em 2012, o Facebook começou um esforço para reconstruir suas aplicações mobile nativas, antes disso suas aplicações Android e iOS eram views da versão mobile do site. Quando essas aplicações começaram a se tornar cada vez mais complexas sua performance começou a degradar, resultando em várias quedas.

No processo de transição para models e views nativas eles perceberam pela primeira vez a necessidade de ter uma API com os dados do News Feed (que nesse ponto era entregue apenas como HTTML). Algumas das opções que avaliaram foram servidores RESTful e FQL tables (que é uma API no estilo SQL do Facebook), mas que foram descartados por não representarem o modelo do Facebook e como os dados são consumido (que são nada mais que grafos de objetos com JSONs, por exemplo). Além disso seria necessário a escrita de muitas linhas de código no servidor para que o cliente conseguisse fazer a conversão.

GraphQL was our opportunity to rethink mobile app data-fetching from the perspective of product designers and developers. It moved the focus of development to the client apps, where designers and developers spend their time and attention.


Principais Vantagens e Recursos

Declarative Data Fetching

O GraphQL abraça um conceito chamado de declarative data fetching em suas consultas, o cliente que irá fazer a requisição tem o poder de selecionar qual a resposta que quer receber como as entidades, campos e relacionamentos utilizando apenas uma consulta.

Sem Over-fetching com GraphQL

Não existe over-fetching com o GraphQL, com ele um cliente mobile tem o poder de escolher quais campos quer receber de acordo com a tela que vai ser apresentada.

Fonte Única de Verdade (Single Source of Truth)

O schema do GraphQL funciona como uma fonte única de verdade para aplicações que o utilizam, ele provê de maneira central um lugar onde todas as informações disponíveis são apresentadas.

Linguagem Fortemente Tipada

O GraphQL é uma linguagem de consulta fortemente tipada e suas consultas são escritas utilizando o GraphQL Schema Definition Language (SDL). Ser uma linguagem fortemente tipada faz com que as consultas do GraphQL sejam menos propensas a erros, podendo ser validadas por IDEs com suporte a auto complementar e validações.

Versionamento

No GraphQL não existem versões de APIs como é comum com REST, com ele é possível "deprecar" a API a nível de campos por exemplo e os clientes ao consultarem receberão uma mensagem de aviso informando que o campo foi "deprecado". Essa funcionalidade do GraphQL faz com que seja possível evoluir uma API com o passar do tempo sem a necessidade de gerar vários recursos como acontece com o REST (adrianolisboa.com/api/v1, adrianolisboa.com/api/v2, etc...)


Principais Desvantagens

Limite de Acessos

Com APIs REST é fácil limitar a quantidade de consultas em um recurso em um dia, com GraphQL como se trata de um único recurso se torna difícil limitar isso por operações, pois essas operações podem ser simples ou custosas.

Cache

Levando como exemplo o REST novamente, com ele é possível pensarmos em cache a nível de recursos que são acessados via URL. Com GraphQL fazer cache se torna uma operação mais complexa, pois cada consulta pode ser diferente uma da outra mesmo que operando sobre a mesma entidade.


Apollo

Não poderia escrever um artigo sobre GraphQL sem mencionar uma das principais implementações do GraphQL existentes atualmente, o Apollo. Ele provê uma plataforma completa contendo implementações client-side e server-side.

Apollo GraphQL plataform
Figura 2: Ecossistema do Apollo GraphQL - Cortesia: https://www.apollographql.com/platform


GraphQL é o novo REST ou o novo SOAP?

O criador do jQuery John Resig junto com seu amigo Loren Sands-Ramshaw estão escrevendo um livro sobre GraphQL onde afirmam que o GraphQL é o novo REST.

Neste episódio do podcast Changelog onde o John discute os motivos de estar tão empolgado com GraphQL e por que ele acredita que o GraphQL é o novo REST.

Há também pessoas desenvolvedoras que digam que o GraphQL é o novo SOAP com JSON, mas não vou aprofundar na discussão e deixar como reflexão para vocês.


Quem já está usando?

Neste site você vai encontrar uma lista de empresas que já utilizam o GraphQL, a lista contém empresas famosas como Atlassian, Github, PayPal além de é claro o Facebook.

A seguir uma lista de vídeos (em inglês) sobre a adoção do GraphQL:


Quero brincar um pouco, por onde começo?

Caso GraphQL ainda não esteja em sua prioridade de coisas para estudar nos próximos dias/semanas/meses e queira brincar um pouco, o GitHub GraphQL API Explorer te permite fazer consultas em dados reais de produção do Github.

Acredito que uma das melhores maneiras de se aprender alguma tecnologia é através da prática, para isso recomendo a leitura do livro The Road to GraphQL por The Road to GraphQL escrito por Robin Wieruch, nele você vai aprender uma maneira bem didática e com muita prática a respeito.


Alternativa ao GraphQL

Uma alternativa interessante ao GraphQL e que vale a pena dar uma espiada é o Falcor que foi criado pela Netflix para resolver problemas semelhantes.


Agradecimentos

Um obrigado especial para Vitor Albuquerque, Julia Naomi, Marcos Brizeno e Gabriel Pereira por terem revisado o artigo antes de ser publicado :)


Referências

Author image
Brasil
I'm a Full-Stack Developer with good experience on design and architecture of software projects, agile methodologies, continuous integration, continuous deployment and continuous delivery.