GraphQL vs REST: Os Trade-offs Honestos
GraphQL não é melhor que REST. REST não é melhor que GraphQL. Cada um tem trade-offs que o tornam melhor para situações específicas.
Comparação Rápida
| Feature | REST | GraphQL |
|---|---|---|
| Endpoints | Um por recurso | Endpoint único (/graphql) |
| Data fetching | Servidor decide o formato | Cliente decide o formato |
| Overfetching | Comum | Resolvido |
| Underfetching | Comum (múltiplos requests) | Resolvido (queries aninhadas) |
| Caching | HTTP caching (nativo) | Requer cache client-side (Apollo) |
| Upload de arquivos | Nativo (multipart) | Complicado |
| Curva de aprendizado | Baixa | Média-Alta |
Exemplo REST
// Perfil do usuário + posts + comentários de cada post
// Requer 3+ requisições:
GET /users/42
GET /users/42/posts
GET /posts/101/comments
GET /posts/102/comments
// Problema N+1Exemplo GraphQL
query {
user(id: 42) {
name
email
posts {
title
comments {
text
author { name }
}
}
}
}Quando Escolher REST
- Apps CRUD simples
- APIs públicas
- Serviços pesados em upload/download de arquivos
- Time familiar com REST, prazo apertado
- Microsserviços comunicando entre si
Quando Escolher GraphQL
- UIs complexas com muitos tipos de dados relacionados
- Apps mobile (largura de banda importa)
- Múltiplos tipos de cliente com necessidades diferentes
- Iteração rápida do frontend
Armadilhas do GraphQL
- Queries N+1 no servidor: Use DataLoader
- Sem HTTP caching: Todos os requests são POST para
/graphql - Segurança: Queries maliciosas podem ser profundamente aninhadas
Muitos times usam ambos: REST para CRUD simples, GraphQL para requisitos complexos do frontend.