Pode ser difícil escolher as tecnologias que serão incluídas na pilha de tecnologia do seu próximo projeto. Em muitos casos – e especialmente quando se trata de escolher entre as APIs GraphQL e RESTful – é tudo uma questão de escolher a próxima melhor arquitetura de projeto de API.
Existem quatro maneiras significativas de construir APIs: SOAP, GRPC, REST, e GraphQL. Frequentemente restringimos nossas mentes ao REST e ao GraphQL sempre que queremos construir APIs. Isto porque REST mudou as maneiras tradicionais de construir APIs com SOAP e GRPC.
GraphQL é amplamente marcado como um REST melhor porque representa uma melhor maneira de construir APIs. Muitos desenvolvedores acreditam que o GraphQL irá substituir o REST. Muitos mais já descobriram que o GraphQL ajuda a resolver alguns desafios comuns que os desenvolvedores enfrentam enquanto constroem APIs REST.
Esses dois métodos de construção de APIs são totalmente diferentes. Na prática, estas tecnologias funcionam enviando uma solicitação HTTP e recebendo o resultado. Ambos têm seus prós e contras e, neste artigo, discutiremos extensivamente estas duas grandes tecnologias que mudaram a maneira como desenvolvemos e escalamos as APIs.
Antes de mergulharmos nos detalhes, porém, vamos primeiro explorar o significado de GraphQL e RESTful APIs.
O que é GraphQL?
GraphQL é uma linguagem de consulta API, bem como um tempo de execução para responder a essas consultas com os dados existentes. Ele também vem equipado com ferramentas poderosas para lidar até mesmo com as mais complexas consultas.
A característica central do GraphQL é sua capacidade de solicitar e receber apenas os dados específicos solicitados – nada mais. Isto torna muito mais simples escalar suas APIs com seu aplicativo.
A parte mais excitante do GraphQL é sua capacidade de fornecer a você todos os dados em um único endpoint.
O diagrama acima é uma representação típica da arquitetura GraphQL. Os clientes fazem pedidos de diferentes dispositivos, e o GraphQL trata seus pedidos e retorna apenas os dados solicitados. Isto resolve o problema de excesso e falta de busca em APIs RESTful.
No exemplo acima, mostramos um playground GraphQL e como você pode consultar os dados com um único endpoint. No topo está o endpoint da API, à esquerda está a consulta que solicita nomes de continentes, e por último, à direita, respondemos à consulta que solicitamos.
GraphQL foi criado pelo Facebook com o objetivo principal de resolver a experiência de seus desenvolvedores de aplicativos móveis enquanto trabalhavam com as APIs REST. Desde que sua primeira versão, open-source foi lançada em 2015, GraphQL tem experimentado um tremendo crescimento devido à adoção da tecnologia por grandes players no negócio de tecnologia.
Empresas que usam GraphQL
Abaixo está uma lista de apenas algumas das empresas e aplicativos que usam GraphQL ativamente em seus servidores.
O Facebook criou o GraphQL, e eles o usam na produção para alimentar seus aplicativos móveis desde 2012. A empresa multibilionária de redes sociais abriu as especificações do GraphQL em 2015, tornando-o acessível em muitos ambientes e para equipes de todos os tamanhos.
GitHub
GitHub também anuncia o uso do GraphQL fornecendo uma API GraphQL para criar integrações, recuperar dados e automatizar seus fluxos de trabalho usando a API GraphQL da GitHub. A GraphQL API do GitHub oferece consultas mais precisas e flexíveis do que a GitHub REST API.
Pinterest também é um dos primeiros a adotar o GraphQL. O gigante do compartilhamento de fotos discutiu publicamente suas primeiras explorações de GraphQL e como eles utilizam a tecnologia GraphQL que alimenta sua empresa de bilhões de dólares.
Muitas outras empresas de bilhões de dólares como Intuit, Shopify, Coursera e Airbnb potencializam seus aplicativos com GraphQL. E esta ampla preferência pelo REST só continua a crescer.
O que é RESTful API?
REST significa “Representational State Transfer,” que é um estilo de arquitetura de software para sistemas hipermídia distribuídos. Ele define princípios e restrições para a troca de recursos entre o servidor e os clientes.
Caso esses princípios são seguidos em uma API, o aplicativo desse API é referida como “RESTful” A API REST do WordPress é um excelente exemplo disso.
Abaixo estão alguns dos princípios e restrições que um API deve satisfazer para ser referido como um Restful API:
- Client-Server Decouple: Os clientes (frontend) e o servidor (backend) são completamente separados e só podem se comunicar através dos endpoints.
- Uniform Interface: Os dados vistos na interface são idênticos em todos os dispositivos.
- Cacheability: O servidor não se lembra caso a solicitação atual está sendo feita pela primeira vez ou não. Cada vez que uma solicitação é feita, ela precisa incluir todas as informações necessárias para processá-la a partir do zero.
- Cacheabilidade: Cache e armazenamento de sessão são permitidos, mas devem ser configurados para permitir que os usuários finais optem por não utilizar o cache de dados.
- Layered System Architecture: As APIs devem ser projetadas para que nem o cliente, nem o servidor possam dizer se estão comunicando diretamente ou por um intermediário.
O diagrama abaixo é da arquitetura básica do REST. Ele mostra como as solicitações e respostas são tipicamente tratadas.
GraphQL vs REST: Qual a diferença?
Benefícios do GraphQL
Abaixo estão alguns benefícios do uso do GraphQL, que ilustram porque ele é mais que suficiente para a construção do próximo aplicativo de bilhões de dólares.
Obtenção de dados através de um único endpoint API
A principal vantagem do GraphQL é sua capacidade de acessar qualquer ou todos os pontos de dados através de um único endpoint API.
Um dos problemas mais comuns com as APIs RESTful é ter muitos endpoint para acessar informações. No GraphQL, você só tem um único endpoint, então você não precisa enviar várias solicitações para recuperar informações diferentes sobre um objeto.
O diagrama abaixo mostra um exemplo claro de recuperação de recursos usando RESTful API e GraphQL. Você pode ver que há apenas um endpoint para acessar o recurso no servidor GraphQL, enquanto múltiplos endpoints da API são necessários para acessar diferentes recursos na API RESTful.
Sem excesso ou falta de busca
A questão do excesso ou falta de captação é um problema conhecido com as APIs RESTful. Isto é quando os clientes baixam dados atingindo endpoint que retornam estruturas de dados fixos, ou então eles recuperam mais ou menos do que eles esperavam.
O excesso de busca resulta no recebimento – ou “busca” – de mais dados do que os requeridos por uma determinada solicitação. Imagine que você está pegando todos os usuários em uma tabela com a intenção de exibir seus nomes de usuário em sua página inicial. Nesse caso, o “fetching” irá retornar todos os dados de cada usuário, incluindo (mas não apenas) o nome.
A falta de busca é relativamente rara, mas acontece quando o endpoint específico falha em fornecer todas as informações solicitadas. O cliente precisará fazer solicitações adicionais para acessar as outras informações, conforme necessário.
GraphQL resolve eficientemente o problema de excesso ou falta de busca agarrando o recurso exato que o cliente solicitou sem nenhum detalhe extra.
Melhor manuseio de sistemas complexos e microsserviços
O GraphQL pode unificar e ocultar a complexidade de sistemas múltiplos integrados.
Por exemplo, digamos que queremos migrar de um aplicativo backend monolítica para uma arquitetura de microsserviço. O GraphQL API ajuda a lidar com a comunicação entre vários microsserviços, fundindo-os em um esquema GraphQL.
Uma vez definidos esses esquemas, tanto o frontend quanto o backend podem se comunicar separadamente sem nenhuma outra mudança, já que o frontend sabe que os dados no esquema estarão sempre em sincronia através do sistema.
Rápido e seguro
O problema do excesso de busca pode resultar em maior consumo de banda para os clientes, podendo, com o tempo, causar atraso no seu aplicativo. Usar padrões de design RESTful API é mais demorado para classificar as informações necessárias a partir de uma enorme carga útil.
Devido à capacidade do GraphQL de evitar o excesso de “fetching” e “under fetching”, o servidor retorna um formato seguro, fácil de ler e previsível que torna suas solicitações e respostas de API mais rápidas.
Benefícios do REST
Apesar da crescente popularidade do GraphQL, o REST ainda é um dos padrões API mais populares. Vamos dar uma olhada no porquê.
- Curva de aprendizado: As APIs RESTful são as mais fáceis de aprender e entender. Esta é sua principal vantagem em relação a outras APIs.
- Serialização: REST vem com uma abordagem flexível e formatos para a serialização de dados em JSON.
- Cache: REST API pode gerenciar uma carga alta com a ajuda de um servidor proxy HTTP e cache.
- Solicitação complexa: As APIs REST têm um endpoint separado para diferentes requisições, e isso ajuda a tornar a requisição complexa mais gerenciável do que em outras APIs
- Limpo e simples: As APIs REST são elegantes, simples e limpas. Elas são simples de explorar.
- Procedimentos HTTP Padrão: REST usa chamadas de procedimentos HTTP padrão para recuperar dados e fazer solicitações.
- Cliente/Servidor: Isto significa que sua lógica de negócios é desacoplada da apresentação. Assim você pode mudar uma sem impactar a outra.
- REST é Stateless: Todas as mensagens trocadas entre cliente e servidor têm todo o contexto necessário para saber o que fazer com a mensagem.
Desvantagens do GraphQL
Agora que já discutimos os prós do GraphQL vs REST, vamos explorar alguns dos inconvenientes do GraphQL:
- Curva de aprendizagem difícil: O GraphQL não é tão fácil de aprender quanto o REST. A parte mais desafiadora da construção de uma API GraphQL é projetar o esquema. Isto leva muito tempo e conhecimento de domínio.
- Upload de arquivos: O GraphQL não tem um recurso nativo de upload de arquivo. Isto pode ser trabalhado usando a codificação Base64, mas o custo de codificação e decodificação desta forma pode ser demorado e caro.
- Web cache: Cache ajuda a reduzir o tráfego frequente para o servidor, acelerando os pedidos e o processo de resposta, mantendo as informações acessadas frequentemente perto do servidor. O GraphQL não suporta ou depende de métodos de cache HTTP, dependendo dos mecanismos de cache dos clientes Apollo ou Relay.
- Não é adequado para aplicativos pequenos: GraphQL pode não ser a melhor arquitetura API para a construção de um aplicativo pequeno. Caso o seu aplicativo não requer as consultas mais flexíveis oferecidas pelo GraphQL, REST é o caminho a seguir.
- Query Complex Query Issue: A capacidade do GraphQL de dar a um cliente exatamente o que ele quer também pode levar a problemas de propagação de consultas. Caso um cliente submete muitas consultas aninhadas, isso pode levar ao envio de consultas erradas, o que pode consumir muito tempo para o servidor. É melhor utilizar REST com endpoints personalizados para atender a tais solicitações.
Desvantagens da REST
Agora, vamos voltar nossa atenção para alguns dos inconvenientes do REST:
- Múltiplas Round Trips: O maior problema com as APIs REST é a natureza de inúmeros endpoints. Isto significa que para o cliente obter todos os recursos para um aplicativo completa, ele precisa fazer inúmeras viagens de ida e volta para obter os dados.
- Over-fetching e Under-fetching: O problema de over-fetching e under-fetching é um grande inconveniente no RESTful APIS. Ele pode causar atraso nas respostas devido a grandes cargas úteis indesejadas.
- Hierarquia: Uma vez que as APIs REST são construídas sobre recursos de referência URI, elas são um ajuste pobre para recursos que não são naturalmente organizados ou acessados em uma hierarquia simples.
Por que usar GraphQL ao invés de REST?
Em seguida, discutiremos porque você pode querer considerar GraphQL para o seu futuro desenvolvimento de API ao invés de RESTful API.
Esquema fortemente digitado
GraphQL usa um sistema do tipo forte para definir as capacidades da API. No GraphQL, a linguagem de definição de esquemas (SDL) é usada para definir os parâmetros que envolvem como o cliente acessa os dados do servidor. Todas as APIs expostas ao cliente são escritas no SDL, resolvendo o problema de inconsistência de dados visto nas APIs RESTful.
Sem excesso de busca ou sub busca
A questão do excesso ou falta de busca é um problema conhecido dos APIs RESTful, nos quais os clientes recebem mais ou menos informações do que solicitaram. GraphQL resolve este problema fornecendo um meio para o cliente especificar as informações necessárias, retornando então exatamente – e somente – aquelas informações específicas.
Múltiplos endpoints
Um dos maiores problemas da API RESTful é ter muitos endpoint para acessar informações.
Vamos supor que você queira acessar um determinado usuário através do seu número de identificação. Você seria presenteado com um endpoint como /users/1
. Mas se você quiser acessar as fotos desse usuário, você terá que enviar uma solicitação para outro endpoint, como /users/1/photos
.
No GraphQL, você tem um único endpoint, e você não precisa enviar várias solicitações para recuperar informações diferentes sobre o usuário.
GraphQL vs REST Showdown
Finalmente, vamos explorar a maior diferença entre GraphQL e RESTful APIs. Depois disso, vamos discutir algumas das características de um bom projeto de API e comparar como cada tecnologia lida com elas.
Desempenho
Não há dúvida de que o GraphQL funciona mais rápido do que as APIs RESTful devido à sua capacidade de fornecer um único endpoint para acessar todos os seus recursos. As APIs RESTful usam múltiplos endpoints, o que pode resultar em latência de rede.
Complexidade de consulta
Como os endpoints não são separados em múltiplos endpoints, as consultas de GraphQL podem se tornar cada vez mais complexas com o tempo. Os endpoints RESTful APIs, por outro lado, são separados, restringindo os RESTful APIs a consultas simples.
Popularidade e suporte da comunidade
GraphQL é um padrão arquitetônico API crescente e uma linguagem de consulta. Embora ainda seja jovem, sua taxa de adoção e seu pool de recursos estão crescendo rapidamente, e os recursos já abundam para aqueles interessados em aprendê-lo para si mesmos.
REST, por outro lado, já conta com vasto suporte da comunidade e continua a ser usado por empresas de todos os tipos, desde aquelas que constroem pequenos microsserviços até aquelas que criam aplicativos sociais complexas e muito mais.
No momento, o concurso de popularidade entre GraphQL vs REST é um sorteio. Ambas as tecnologias continuam a ser amplamente utilizadas e bem apoiadas pela comunidade de desenvolvimento.
Curva de aprendizagem
A curva de aprendizado do GraphQL é íngreme. Ela requer bom conhecimento de domínio do desenvolvimento de API e engenharia geral de software. Um iniciante completo terá dificuldades para entender o GraphQL o suficiente para construir um aplicativo complexo.
Por outro lado, REST é muito fácil de começar e requer menos conhecimento de domínio fora do portal. RESTful API é bem integrado na maioria das principais linguagens de programação e frameworks populares, tornando o aprendizado muito fácil.
Resumo
GraphQL é uma nova tecnologia que segue os padrões arquitetônicos RESTful API, assim como o REST foi introduzido para resolver problemas com padrões SOAP API.
GraphQL oferece respostas mais rápidas, um único endpoint de API para todas as suas consultas e um esquema rígido para acesso consistente aos dados. Estas razões são o que fez com que empresas multimilionárias começassem a mudar para GraphQL, mesmo no estágio inicial. Entretanto, apesar de suas limitações, o progenitor REST do GraphQL continua a manter uma forte presença no palco.
Neste guia, exploramos tudo que você precisa saber sobre GraphQL e APIs RESTful, incluindo os benefícios e desvantagens de cada tecnologia, a fim de ajudá-lo a decidir com confiança qual delas você prefere. Também discutimos os problemas conhecidos com as APIs RESTful – tais como over-fetching, under-fetching e múltiplos endpoints – e como o GraphQL tenta resolver esses problemas e aumentar o desempenho do seu aplicativo.
Você agora tem discernimento suficiente para escolher se o GraphQL vs REST é apropriado para o seu próximo projeto. Diga-nos na seção de comentários o que você estará construindo com o vencedor escolhido!
A principal diferença está na forma como eles se comunicam com o servidor. O GraphQL é uma tecnologia mais recente que usa um único endpoint para responder às consultas, enquanto o REST usa um conjunto de endpoints que respondem a solicitações HTTP específicas. Geralmente, o GraphQL é considerado mais eficiente e flexível do que o REST.