Artigo
19 de Março de 2025 | FRT Digital
REST vs GraphQL — Escolhendo a Arquitetura Certa para seu Produto Digital
Uma análise técnica além do hype para ajudar times a tomar a decisão certa no contexto certo
Leia mais
Uma análise técnica além do hype para ajudar times a tomar a decisão certa no contexto certo
19 de Março de 2025 | FRT Digital
A discussão entre REST e GraphQL raramente chega a uma conclusão útil porque parte de uma premissa equivocada: que existe uma resposta correta universal. Na prática, a escolha depende do contexto — da natureza do produto, do perfil do time, dos clientes da API e dos requisitos de evolução. Este artigo examina as diferenças técnicas reais, os trade-offs frequentemente ignorados e os critérios que devem guiar a decisão.
O que REST resolve bem (e onde começa a doer)
REST é um estilo arquitetural, não um protocolo. Sua força está na simplicidade: recursos são URLs, operações são verbos HTTP, respostas são representações de estado. Qualquer desenvolvedor com alguma experiência web entende a convenção intuitivamente. Cache HTTP funciona de forma nativa. Ferramentas de monitoramento, gateways de API e documentação (OpenAPI/Swagger) têm suporte consolidado há décadas.
O problema começa quando o cliente precisa de dados que não se encaixam perfeitamente no modelo de recursos do servidor. Os dois antipadrões clássicos são over-fetching (receber mais dados do que precisa) e under-fetching (precisar de múltiplas requisições para compor a tela).
Um exemplo concreto: uma tela de perfil de usuário que precisa exibir dados do usuário, seus últimos três posts e a contagem de seguidores. Com REST puro, isso pode exigir três chamadas (`GET /users/123`, `GET /users/123/posts?limit=3`, `GET /users/123/followers/count`). O front-end orquestra essas chamadas, trata estados de loading independentes e compõe os dados — tudo trabalho que poderia ser resolvido no servidor.
O que GraphQL resolve (e o que ele introduz)
GraphQL é uma linguagem de consulta para APIs. O cliente descreve exatamente os dados que precisa, e o servidor retorna apenas isso — nada mais, nada menos. O exemplo anterior se torna uma única query que busca usuário, posts e contagem de seguidores em uma só round-trip.
Além de eliminar over/under-fetching, GraphQL oferece introspecção nativa: o schema é autodocumentado e ferramentas como GraphiQL ou Apollo Studio permitem explorar e testar a API interativamente. Para produtos com múltiplos clientes consumindo a mesma API (web, mobile, TV, parceiros externos), GraphQL permite que cada cliente busque exatamente o que precisa sem forçar o servidor a criar endpoints customizados.
A complexidade que GraphQL introduz é real e precisa ser reconhecida: resolvers precisam ser implementados com cuidado para evitar o problema N+1 (uma query que dispara N queries adicionais para cada item de uma lista). Ferramentas como DataLoader são necessárias para batching. O cache HTTP não funciona out-of-the-box para queries POST, exigindo estratégias de cache em nível de aplicação. A curva de aprendizado para times sem experiência prévia é significativa.
Performance: contexto é tudo
A narrativa de que "GraphQL é mais rápido porque reduz over-fetching" é verdadeira em alguns cenários e falsa em outros. Em conexões lentas (mobile em 3G), reduzir o payload de resposta tem impacto real no tempo de carregamento. Em redes de alta velocidade com payloads moderados, a diferença é negligenciável.
Por outro lado, queries GraphQL mal escritas ou sem DataLoader podem ser muito mais lentas do que o equivalente REST com uma query SQL otimizada. A complexidade de execução no servidor é potencialmente maior em GraphQL — o ganho de latência no cliente pode ser transferido para latência no servidor.
Para APIs públicas com contratos de cache agressivos (CDN, Varnish), REST ainda é superior. Cache de responses HTTP é trivial para GET requests; para GraphQL POST, você precisa de persisted queries ou soluções proprietárias.
Casos onde REST é a escolha certa
REST funciona melhor quando: a API é pública e consumida por parceiros externos com contratos de versionamento claros; o modelo de dados é estável e não exige consultas altamente variáveis; cache HTTP é crítico para a estratégia de performance; o time é pequeno e a simplicidade operacional tem alto valor; a API expõe operações de CRUD direto sobre recursos bem definidos.
Microsserviços internos que se comunicam entre si também raramente precisam de GraphQL — REST ou gRPC são mais adequados para esse cenário.
Casos onde GraphQL agrega valor real
GraphQL se justifica quando: há múltiplos clientes com necessidades de dados diferentes (mobile com dados reduzidos vs. dashboard web com dados completos); o front-end é desenvolvido por um time separado do back-end e precisa de autonomia para buscar dados sem depender de novos endpoints; o produto evolui rapidamente e o schema de dados muda com frequência; a experiência do desenvolvedor front-end é uma prioridade estratégica.
Empresas como GitHub, Shopify e Twitter (X) migraram APIs públicas para GraphQL justamente porque têm uma enorme variedade de clientes com necessidades heterogêneas.
A terceira via: BFF (Backend for Frontend)
Uma estratégia que resolve muitos dos trade-offs é o padrão BFF. Em vez de escolher entre REST e GraphQL globalmente, você mantém APIs REST internas entre microsserviços (simples, com contratos claros) e implementa uma camada GraphQL como interface específica para os clientes front-end.
O BFF GraphQL agrega dados de múltiplos serviços REST internos, expõe um schema orientado às necessidades das telas e absorve a complexidade de composição — sem que os serviços internos precisem mudar. É uma arquitetura que captura o melhor dos dois mundos sem os piores trade-offs de cada um.
A decisão final deve ser guiada pelo problema real que você está tentando resolver, não pela tecnologia que está em alta. Tanto REST quanto GraphQL são ferramentas maduras e válidas — a competência está em saber qual usar em cada contexto.
Artigo
REST vs GraphQL — Escolhendo a Arquitetura Certa para seu Produto Digital
19 de Março de 2025 | FRT Digital
Leia também
Artigo
Design Systems Escaláveis — Do Figma ao Código com Design Tokens
12 de Fevereiro de 2025

