GraphQL vs REST: Los Trade-offs Honestos
GraphQL no es mejor que REST. REST no es mejor que GraphQL. Cada uno tiene trade-offs que lo hacen mejor para situaciones específicas.
Comparación Rápida
| Feature | REST | GraphQL |
|---|---|---|
| Endpoints | Uno por recurso | Endpoint único (/graphql) |
| Data fetching | Servidor decide el formato | Cliente decide el formato |
| Overfetching | Común | Resuelto |
| Underfetching | Común | Resuelto (queries anidadas) |
| Caching | HTTP caching (nativo) | Requiere caché client-side (Apollo) |
| Upload de archivos | Nativo (multipart) | Complicado |
| Curva de aprendizaje | Baja | Media-Alta |
Ejemplo REST
GET /users/42
GET /users/42/posts
GET /posts/101/comments
GET /posts/102/comments
// Problema N+1Ejemplo GraphQL
query {
user(id: 42) {
name
email
posts {
title
comments {
text
author { name }
}
}
}
}Cuándo Elegir REST
- Apps CRUD simples
- APIs públicas
- Servicios pesados en upload/download
- Equipo familiar con REST, plazo ajustado
Cuándo Elegir GraphQL
- UIs complejas con muchos tipos de datos relacionados
- Apps móviles (ancho de banda importa)
- Múltiples tipos de cliente con necesidades diferentes
- Iteración rápida del frontend
Trampas de GraphQL
- Queries N+1 en el servidor: Usa DataLoader
- Sin HTTP caching: Todos los requests son POST
- Seguridad: Queries maliciosas pueden ser profundamente anidadas
Muchos equipos usan ambos: REST para CRUD simple, GraphQL para requisitos complejos del frontend.