menu

SHARKLABS

GraphQL-Ruby versus JSONAPI-Resources: Exclusivo para Programadores Ruby on Rails

/
/
GraphQL-Ruby versus JSONAPI-Resources: Exclusivo para Programadores Ruby on Rails
bookmark Ruby on Rails, GraphQL access_time

Padrões e suas bibliotecas

Conforme o título deste artigo eu pretendo falar sobre duas bibliotecas utilizadas por programadores Ruby para construir API. Mas antes disso quero falar sobre os padrões que essas bibliotecas implementam.

REST API e JSON API

REST API é um modelo de arquitetura baseado no protocolo HTTP para comunicação e integração entre softwares. Ele surgiu como alternativa ao SOAP, muito criticado pela sua complexidade.

Se você deseja saber mais sobre REST API, recomendo que você leia este artigo da Caelum.

JSON API surgiu como uma extensão do REST API. Ou seja, ele é uma especificação que padroniza os parâmetros e retornos de uma REST API. Recentemente escrevi um artigo sobre este assunto: Clique aqui.

GraphQL

O GraphQL é um padrão que especifica como deve ser a comunicação entre dois softwares. O GraphQL surge como uma alternativa ao REST API, da mesma maneira como o REST API surgiu como uma alternativa ao SOAP.

Um dos principais fatores que levaram a criação do GraphQL é tornar a comunicação entre os softwares mais flexível e leve (trafegar menos dados para consumir menos internet).

Se você quer saber mais detalhes sobre a história do GraphQL, recomendo que você leia este artigo da TreinaWeb.

Benefícios de cada um

Principais benefícios do padrão REST API:

  • Maior legado: É mais antigo e por isso existem muitas aplicações construídas com REST API.
  • Menor curva de aprendizagem: É muito fácil aprender REST API para quem tem o mínimo de conhecimento do protocolo HTTP.
  • Facilidade de implementação: Basta um simples servidor HTTP para criar uma REST API.

Principais benefícios do padrão GraphQL:

  • Facilita requisições com relacionamentos complexos.
  • Flexibilidade para seleção de campos.
  • Possibilidade de executar várias ações em apenas uma requisição.
  • Estimula requisições mais leves.
  • Independência de protocolo TCP/IP.

Qual é a melhor especificação?

Embora cada uma tenha suas vantagens e desvantagens, na minha opinião o GraphQL é um padrão mais evoluído, uma vez que ele é mais recente e surgiu justamente para corrigir alguns problemas do REST API.

Implementação com Ruby on Rails

Para nos ajudar na implementação de cada padrão existem várias bibliotecas que tornam o processo menos trabalhoso. Neste caso vou falar de: GraphQL-Ruby e JSONAPI-Resources.

Recentemente fiz dois tutoriais falando sobre cada uma das bibliotecas:

REST API virando o jogo

A minha opinião é que a biblioteca JSONAPI-Resources é mais engajada com o estilo Ruby on Rails. Ela valoriza os padrões Don’t repeat yourself e Convention over configuration.

JSONAPI-Resources é muito bem integrada ao ambiente Ruby on Rails e usa ao máximo os recursos oferecidos pelo framework. Com poucas linhas de código você consegue criar uma REST API completa.

Por outro lado, se você abrir o link do Tutorial GraphQL-Ruby você vai perceber a quantidade de código "duplicado" necessário para cria uma API e isso não vai ao encontro dos valores do Ruby.

Por isso, nos meus projetos eu ainda continuo utilizando REST API em vez de GraphQL. Nada contra o GraphQL, inclusive comentei acima que ele é mais evoluído.

A questão é que atualmente a biblioteca GraphQL-Ruby não é tão produtiva (tempo do programador) quanto o JSONAPI-Resources. Já existem algumas bibliotecas que pretendem solucionar este problema, mas nenhuma delas é madura para um software em produção.

Dúvidas ou sugestões é só entrar em contato. Abraço.

Autor
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." Martin Fowler