TechPurger

REST vs GraphQL: qual usar na sua API?

Publicado em: 09 de Junho de 2026 ‱ Por: Rinaldo Purger

Ao construir uma API, uma das decisĂ”es mais importantes Ă© escolher o estilo arquitetural. Por anos, o REST dominou o mercado. Mais recentemente, o GraphQL — criado pelo Facebook em 2012 e aberto ao pĂșblico em 2015 — ganhou força como alternativa. Mas qual usar?

O que Ă© REST?

REST (Representational State Transfer) Ă© um conjunto de convençÔes arquiteturais baseado em endpoints HTTP. Cada recurso tem sua prĂłpria URL e vocĂȘ interage com ele usando os verbos HTTP: GET, POST, PUT, DELETE.

GET /usuarios/42 # busca usuĂĄrio
POST /usuarios # cria usuĂĄrio
GET /usuarios/42/pedidos # busca pedidos do usuĂĄrio

O que Ă© GraphQL?

GraphQL Ă© uma linguagem de consulta para APIs. Em vez de mĂșltiplos endpoints, existe apenas um — geralmente /graphql. O cliente descreve exatamente os dados que precisa na prĂłpria requisição.

query {{'{'}}
  usuario(id: 42) {{'{'}}
    nome
    email
    pedidos {{'{'}} total status {{'}'}}
  {{'}'}}
{{'}'}}

Comparação direta

CritérioRESTGraphQL
Curva de aprendizadoBaixaMédia
Over-fetchingComumEliminado
MĂșltiplos recursosN chamadas1 chamada
Cache HTTP nativoSimComplexo
Ideal paraAPIs pĂșblicas simplesApps com muitas telas

Quando usar cada um?

Use REST quando: sua API Ă© pĂșblica e consumida por terceiros, a equipe Ă© pequena e prefere simplicidade, ou vocĂȘ precisa de cache HTTP nativo.

Use GraphQL quando: seu frontend tem muitas telas com necessidades de dados diferentes (ex: app mobile vs web), vocĂȘ quer evitar mĂșltiplas chamadas, ou estĂĄ construindo um BFF (Backend for Frontend).

GraphQL na prĂĄtica: como montar um servidor

Com Node.js e a biblioteca Apollo Server, vocĂȘ pode ter um servidor GraphQL rodando em minutos:

npm install @apollo/server graphql

// Definição do schema (contrato da API)
const typeDefs = `#graphql
  type Usuario {{'{'}} id: ID, nome: String, email: String {{'}'}}
  type Query {{'{'}} usuario(id: ID!): Usuario {{'}'}}
`;

// Resolvers (onde a lĂłgica vive)
const resolvers = {{'{'}} Query: {{'{'}} usuario: (_, {{'{'}}id{{'}'}}) => buscarUsuario(id) {{'}'}}
{{'}'}};

O problema do over-fetching no REST

Imagine que vocĂȘ tem uma tela de perfil no app mobile que precisa apenas do nome e foto do usuĂĄrio. Com REST, a chamada GET /usuarios/42 retorna todos os campos — CPF, endereço, histĂłrico de compras, configuraçÔes. Isso Ă© over-fetching: vocĂȘ recebe muito mais do que precisa, desperdiçando banda (crĂ­tico em mobile) e aumentando o tempo de parsing.

Com GraphQL, vocĂȘ pede exatamente nome e fotoPerfil e recebe apenas esses dois campos.

tRPC: uma terceira opção para TypeScript

Para projetos full-stack em TypeScript, o tRPC Ă© uma alternativa interessante que combina o melhor dos dois mundos: tipagem end-to-end automĂĄtica (sem schema manual como no GraphQL) e simplicidade de REST. O cliente e o servidor compartilham os mesmos tipos TypeScript, eliminando completamente a necessidade de escrever schemas separados ou gerar cĂłdigo.

Adoção no mercado

GitHub, Shopify, Twitter e Facebook usam GraphQL em produção. Mas grandes APIs pĂșblicas como Stripe, Twilio e a maioria dos serviços de pagamento ainda usam REST. A tendĂȘncia para novos projetos com frontends complexos Ă© GraphQL, mas REST estĂĄ longe de morrer — especialmente para integraçÔes B2B e APIs pĂșblicas simples.

ConclusĂŁo

NĂŁo hĂĄ resposta errada — hĂĄ a resposta certa para o seu contexto. Para projetos novos com frontends complexos e mobile, GraphQL vale o investimento. Para APIs simples, REST ainda Ă© a escolha mais pragmĂĄtica e amplamente suportada.