GraphQL x REST: Qual utilizar?

Desenvolvimento

Introdução

Nós aqui da ez.devs estamos buscando a aprender novas tecnologias e conceitos diariamente, em uma dessas buscas, surgiu o GraphQL. Com ele surgiram diversas dúvidas sobre seu conceito e qual a sua diferença com o “concorrente” mais utilizado hoje, o REST.

O objetivo desse artigo é explicar o conceito do GraphQL, entender as diferenças em relação ao REST e concluir se devemos considerar ou não a utilização do mesmo na nossa stack de desenvolvimento.

Lembrando que o objetivo aqui não é explicar a fundo o conceito, para isso, fique ligado no nosso blog que falaremos sobre isso mais a frente.

O que é GraphQL

Criado pelo Facebook em 2012 o GraphQL é uma nova maneira de expor dados do servidor além do conceito REST. O mesmo foi criado a partir de um problema que a equipe de desenvolvimento teve quando começaram a fazer o aplicativo da rede social, problema que muitos de nós enfrentamos no dia a dia: muitos dados retornados pela API REST que eram utilizados na plataforma WEB e não eram utilizados no aplicativo, isso acabava tendo um consumo desnecessário da banda.

O conceito criado é muito conhecido como uma linguagem de consulta para APIs, imagine como um SQL para banco de dados. Você consegue enviar uma QUERY no BODY de uma requisição com métodos GET ou POST para o servidor pedindo exatamente o que você quer. Isso diminui consideravelmente a criação de APIs para cada estrutura de dados.

Abaixo um exemplo de uma QUERY, isso, como explicado anteriormente, é enviado no BODY da requisição. Nesse exemplo, estamos fazendo uma consulta no SCHEMA de usuário, trazendo apenas os campos: Id, Name e Team Name.

Exemplo de uma consulta em GraphQL

O GraphQL não está vinculado a nenhum tipo de banco de dados ou ORM, permitindo assim, você trabalhar com qualquer ferramenta.

Imagine uma pequena aplicação de exemplo onde é possível consultar, cadastrar, alterar e deletar usuários. Nesse caso nós teríamos o seguinte código:

Exemplo de um Schema feita com GraphQL

Observando o exemplo acima, podemos reparar que foi criado o SCHEMA User onde ele será nosso objeto de retorno tanto das nossas QUERIES quanto das MUTATIONS.

As QUERIES são utilizadas para quando você precisa expor dados para o cliente, as MUTATIONS são utilizadas quando você precisa alterar o estado de algum dado como por exemplo criar, alterar, deletar.

Depois que foi criado os SCHEMAS é necessário criar os arquivos conhecidos como Resolvers, esses arquivos são responsáveis por manter as lógicas dos schemas.

Não vamos entrar muito afundo aqui pois vamos guardar para outro post, a ideia é realmente dar uma base do conceito para que possamos comparar com o REST.

Powered by Rock Convert

O que é REST?

REST (REpresentational State Transfer) definido nos anos 2000 é um conceito mais utilizado para a criação de web services, esse conceito utiliza os métodos HTTP como GET, POST, PUT, DELETE e entre outros. Os métodos são responsáveis por determinar uma operação de quem está enviando deseja fazer.

Resumindo, imagine a mesma aplicação de exemplo citado acima. Nesse caso nós teríamos a seguinte rotas:

GraphQL x REST

REST

  • Baixa curva de aprendizagem em relação ao GraphQL
  • Comunidade engajada (existe a mais tempo que o GraphQL)
  • Muito suporte de diversas linguagens e frameworks
  • Difundido e utilizado pelas empresas
  • Muito emprego disponível por conta da utilização das empresas
  • Maiores formas de implementação por conta dos anos de existências

GraphQL

  • Busca apenas os campos que você realmente vai utilizar
  • Consegue fazer várias buscar em uma única requisição
  • Documentação automática
  • O sistema de tipos dele já contém um processo de validação tanto de entrada quanto de saída
  • Facilidade de se trabalhar com múltiplos bancos de dados

Conclusão

Com esse pequeno teste, podemos concluir que o GraphQL vem ganhando muito espaço no mercado de tecnologia por sua facilidade e elegância no desenvolvimento de APIs modernas. Com o apoio da comunidade acredito que o conceito só tende a evoluir e melhorar, facilitando nosso dia a dia cada vez mais. Aqui na ez.devs nós já utilizamos em conjunto com o Node.js e vem ajudando demais o desenvolvimento do nosso time.

Porém, como nem tudo “são flores”, o conceito não é nenhuma “bala de prata”, se comparado ao REST, existem poucas bibliotecas e ferramentas que auxiliam a sua implementação, como ele tem mais tempo de mercado existem muito mais códigos prontos a serem consultados. Talvez, nesse caso, o REST resolva melhor os seus problemas.

Indico você experimentar os dois, e ver qual se adequa melhor ao projeto que está desenvolvendo, tenho certeza que com o teste você vai entender muito melhor os benefícios de cada um e qual o melhor contexto para a utilização.

E você? Já testou cada um deles? Deixe seu comentário explicando qual prefere e o motivo que nós vamos adorar bater um papo 😃

Entre com seus dados para a ligação.