GraphQL vs REST: como eles diferem de verdade

GraphQL vs REST

GraphQL vs REST: os mesmos dados buscados dos dois jeitos | We.Inc

Compare GraphQL e REST com os mesmos dados buscados dos dois jeitos: número de requisições, over-fetching, cache, como os erros voltam e uma tabela para escolher um deles.

REST expõe muitas URLs, uma por recurso, e o servidor decide o que cada resposta contém. GraphQL expõe um único endpoint, geralmente /graphql, para onde o cliente envia uma query que lista exatamente os campos que quer. REST ganha cache HTTP de graça pela URL; GraphQL economiza idas e voltas e corta campos não usados, ao custo de mais trabalho no servidor.

Visão geral

A comparação abaixo busca a mesma tela de dados dos dois jeitos. Escolha um cenário para ver as chamadas REST que um cliente faria ao lado da única query GraphQL que as substitui, e o que cada resposta deixa de fora ou acrescenta.

Perguntas frequentes

GraphQL é mais rápido que REST?

Não por si só. Ele pode reduzir idas e voltas e o tamanho do payload em telas que precisam de dados relacionados, mas cada query pode custar mais para o servidor resolver. Um endpoint REST bem projetado para uma tela pode ser igualmente rápido.

Por que um erro de GraphQL volta com status 200?

Um campo pode falhar enquanto outros dão certo, então o servidor devolve os dados que tem mais um array errors. A orientação de GraphQL over HTTP usa 2xx para sucesso parcial; servidores que respondem com application/graphql-response+json usam 400 quando uma requisição falha na validação.

Respostas GraphQL podem ficar em cache em uma CDN?

Sim, se as queries forem enviadas com GET, o que os servidores podem permitir apenas para queries. Queries longas podem passar do limite de tamanho da URL, então os times usam persisted queries, que enviam um hash curto em vez do documento inteiro.

Posso usar os dois no mesmo produto?

Muitos times fazem isso. Upload de arquivos, webhooks e recursos públicos simples costumam ficar como rotas REST, enquanto as telas do app leem por uma camada GraphQL que pode chamar esses mesmos serviços por baixo.

GraphQL precisa de um banco de dados próprio?

Não. Um servidor GraphQL é uma camada de resolvers, pequenas funções que buscam cada campo onde quer que o dado esteja: um banco de dados, um serviço REST ou um arquivo. O schema descreve formatos, não armazenamento.

Over-fetching e under-fetching

O cache funciona de outro jeito

Erros e códigos de status

Qual escolher

Tabela de decisão

O que trafega na rede

Uma requisição GraphQL com fetch

Toda operação é um POST de JSON com as chaves query e variables para o único endpoint. O cabeçalho Accept pede o tipo de resposta GraphQL mais novo, com JSON simples como alternativa.

Uma resposta GraphQL parcial

Um campo falhou, então ele está null e a entrada em errors o identifica com path. O resto dos dados chegou mesmo assim.

Perfil com posts

REST precisa de uma segunda chamada para os posts, e as duas respostas trazem todos os campos que o servidor inclui. A query GraphQL devolve só o nome, o avatar e três títulos de posts.

Só nomes

Para uma lista simples, a chamada REST é uma requisição de qualquer forma, mas envia os registros completos dos usuários. GraphQL envia só os dois campos pedidos.

Post com comentários e autores

Sem um endpoint personalizado, REST percorre a árvore um nível por requisição, e buscar o autor de cada comentário pode significar mais uma chamada por comentário. GraphQL aninha a árvore inteira em uma query.

Criar um post

As escritas se parecem: uma requisição cada. REST usa o método POST em uma URL de coleção; GraphQL envia uma mutation, ainda como HTTP POST, e escolhe quais campos do novo post devolver.

Os mesmos dados, dos dois jeitos

Escolha um cenário

Requisições REST

Query GraphQL

Copiar requisições REST

Copiar query GraphQL

REST: {n} requisição(ões). GraphQL: {v} requisição.

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site