A Prensa foi feita para os ávidos e inconformados.

Por que o GraphQL vem tomando espaço do REST?

Por que o GraphQL vem tomando espaço do REST?

No mundo da tecnologia, novos métodos e conceitos surgem constantemente, cada um com suas vantagens e desvantagens. Algo que hoje é amplamente usado, amanhã pode estar em desuso e se tornar obsoleto. 

No mundo do desenvolvimento web, temos o conceito de API (Application Programming Interface - Interface de programação de aplicações). As APIs estão presentes nas mais diversas aplicações web e mobile. De um modo geral, as APIs trabalham em conjunto com as aplicações clientes.  

Imagine você consumindo conteúdo em uma rede social pelo telefone celular. Nele há um app que reproduz este conteúdo ao usuário, mas que não fica salvo localmente no celular. A API, neste caso, é responsável por armazenar, processar e enviar o conteúdo ao seu celular, que então pode reproduzi-lo, já que seu telefone não possui o poder de processamento suficiente para fazer isto. 

Em outras palavras, as APIs servem para fazer o "trabalho sujo", para que as aplicações clientes funcionem conforme o esperado. Elas podem ser feitas baseadas em diversas arquiteturas. Neste artigo, vou te apresentar a arquitetura/linguagem de consulta chamada GraphQL e porque ela vem tomando um certo espaço antes ocupado pela arquitetura REST. 

REST

A arquitetura mais conhecida e usada atualmente é a REST (REpresentational State Transfer), ou RESTful. Voltando ao "tecniquês", essas APIs utilizam os métodos HTTP (Hypertext Transfer Protocol) e transferem uma representação do estado do recurso ao solicitante (ou endpoint).

Essa informação (ou representação) pode ser entregue via HTTP através de diversos formatos, sendo o mais comum JSON (Javascript Object Notation), por ser facilmente compreendido por humanos ou máquinas sem depender de outra linguagem, apesar do nome. 

GraphQL

GraphQL é uma arquitetura/linguagem de consulta criada em 2012 pelo Facebook para o desenvolvimento de APIs rápidas, flexíveis e intuitivas para desenvolvedores. Ele provê uma descrição completa dos dados da API, permitindo que quem consome a API, ou seja o cliente, possa solicitar exatamente as informações que ele quer, e nada além disso. O GraphQL permite extrair os dados de variadas fontes em uma única chamada de API. 

Para desenvolver uma API em GraphQL, é necessário criar um esquema (schema) descrevendo todos os dados possíveis manipulados por ela. Ele é composto por duas partes: "objetos que podem ser solicitados" e "quais campos eles terão". 

Quando as consultas (queries) são recebidas pela API, o GraphQL valida de acordo com o esquema declarado anteriormente. Em seguida, ele executa as consultas validadas. Existem 2 tipos de consultas: query mutation.  

As queries são as consultas que simplesmente buscam informações pela API. Já as mutations servem para alterar informações no lado do servidor e podem também retornar dados. Exemplificando, se você deseja buscar um usuário na tabela de usuários através do e-mail, você deve utilizar uma query. Caso queira adicionar um novo usuário, você deve utilizar uma mutation

O desenvolvedor da API anexa cada campo de um determinado esquema a uma função denominada resolvedor (resolver). Durante a execução, o resolvedor é chamado para produzir o valor. De forma resumida, o resolvedor é o responsável por conter a lógica por trás da chamada que irá resolvê-la. Por exemplo, é nele onde encontramos a busca ao banco de dados para devolver as informações a quem requisitou. 

REST X GraphQL

As APIs REST são ótimas para quem está começando no mundo do desenvolvimento, já que apresenta uma curva de aprendizado menor do que a do GraphQL, já está consolidada no mercado e é amplamente utilizada pelas mais variadas empresas, sendo fácil encontrar vagas de emprego que exijam esse conhecimento. Além disso, há muito conteúdo disseminado na internet por ser uma arquitetura tão utilizado.

Por outro lado, as APIs GraphQL resolvem diversas questões que as REST não são capazes de cuidar. São mais recomendadas para desenvolvedores mais experientes devido a sua curva de aprendizado maior, já que envolvem o aprendizado da linguagem de consulta e dos demais conceitos presentes nesta arquitetura. 

O GraphQL permite o desenvolvimento de APIs mais robustas, consistentes e flexíveis. Por não ter uma arquitetura de aplicação específica, o GraphQL pode até mesmo ser introduzido em uma API REST existente, podendo servir como um complemento. 

Duas vantagens muito úteis do GraphQL, e que poupam um bom tempo e esforço, são a possibilidade de gerar uma documentação de forma automática e a de excluir a criação de diversos endpoints. Devido ao esquema, o cliente consegue ter, facilmente, uma lista completa do que ele pode requisitar, ajudando na hora de construir as consultas.

Para fechar com chave de ouro, vamos falar sobre o over-fetching causado pelas APIs REST, algo e que o GraphQL resolve. Esse conceito faz referência à quantidade de dados desnecessários que a API REST trafega e que o cliente pode acabar nem usando.   

Ao fazer uma requisição a um endpoint de uma API REST, ela tende a retornar os mesmos padrões de dados sempre, nada mais e nada a menos. Ou seja, se você deseja buscar apenas o e-mail de um usuário, você teria que buscar todos os dados deste usuário pelo endpoint criado com esta finalidade e depois filtrá-los para pegar apenas o desejado no cliente.  

Uma alternativa para isso seria criar um endpoint que retorne apenas o e-mail, mas você vai fazer um endpoint novo para cada caso como esse em seu sistema? 

O GraphQL permite ao cliente requisitar apenas os dados que serão úteis para ele no momento da chamada, reduzindo o processamento e tráfego de dados causados pela requisição à API. Ou seja, você consegue ter uma aplicação mais performática e menos custosa, já que manuseia uma quantidade menor de informação. Outra vantagem interessante de ressaltar é que no GraphQL, o seu sistema de tipos já contém um processo de validação tanto de entrada quanto de saída. 

Concluindo, se você é um desenvolvedor iniciante e está querendo aprender sobre APIs, é interessante começar pelas APIs REST. Caso você seja um desenvolvedor mais experiente, procurando uma nova tecnologia para construir uma API mais moderna e que soluciona alguns problemas das APIs REST, escolha o GraphQL. 

Topo