El dilema de cada proyecto nuevo
Tarde o temprano, en casi todos los proyectos que arrancamos aparece la misma pregunta: ¿la API la hacemos REST o GraphQL? La respuesta honesta es que las dos opciones son excelentes en su terreno — y que elegir mal no se nota el primer mes, sino el primer año, cuando los clientes de la API se han multiplicado y cambiar de opinión ya cuesta.
Este artículo es la guía de decisión que usamos nosotros: sin dogmas, con los criterios que de verdad pesan.
REST: el estándar que resuelve casi todo
REST lleva más de dos décadas siendo la forma por defecto de construir APIs HTTP, y por buenas razones:
- Simplicidad conceptual: recursos, verbos HTTP y códigos de estado. Cualquier desarrollador lo entiende en minutos y cualquier herramienta (curl, Postman, proxies, gateways) lo maneja sin adaptación.
- Caché gratis: la semántica HTTP de caché (ETags, Cache-Control, CDNs) está diseñada para REST. Para APIs de lectura intensiva es una ventaja enorme en rendimiento y coste.
- Depuración y observabilidad: cada endpoint aparece en logs, métricas y trazas como una línea clara. Diagnosticar «el endpoint X va lento» es trivial.
- Ecosistema: documentación con OpenAPI, generación de clientes, contratos claros.
Sus puntos débiles conocidos: el over-fetching (el endpoint te da más datos de los que necesitas), el under-fetching (para montar una pantalla hacen falta tres llamadas) y la proliferación de endpoints a medida que crece el producto.
GraphQL: una sola puerta, exactamente lo que pides
GraphQL ataca precisamente esos tres problemas: un único endpoint al que el cliente le pide exactamente los campos que necesita, con la forma que necesita, en una sola petición.
- El cliente manda: cada consumidor (web, móvil, partners) pide su propio subconjunto sin necesitar endpoints nuevos ni versiones paralelas.
- Esquema fuertemente tipado: la API es autodocumentada y validable; el contrato está en el propio esquema.
- Ideal con frontends diversos: cuando una misma API alimenta una SPA, una app móvil y pantallas muy distintas entre sí, GraphQL evita la explosión combinatoria de endpoints.
A cambio, exige más: la caché HTTP deja de ser gratis (hay que resolverla a nivel de aplicación o con herramientas específicas), hay que protegerse de consultas abusivas (límites de profundidad y complejidad), la observabilidad por endpoint desaparece (todo es POST /graphql) y el equipo necesita conocer la tecnología.
Criterios de decisión que de verdad pesan
Olvida los debates de Twitter. Estas son las preguntas que respondemos antes de elegir:
1. ¿Quién consume la API?
Si la consumen terceros o el público (partners, integraciones, una API pública de producto), REST gana casi siempre: es lo que todo el mundo espera, se integra con cualquier cliente HTTP y se documenta solo con OpenAPI. Si la consumen tus propios frontends y son varios y muy diferentes, GraphQL brilla.
2. ¿Cómo es el patrón de lectura?
Lecturas masivas y repetitivas con alto valor de caché (catálogos, contenido, datos de referencia): REST con caché HTTP/CDN es imbatible en coste por petición. Pantallas complejas que agregan muchas entidades distintas por vista: GraphQL reduce drásticamente las idas y venidas.
3. ¿Qué equipo lo va a mantener?
Una API GraphQL mal operada es peor que una REST mediocre. Si el equipo no ha trabajado con GraphQL, el primer proyecto tendrá curva: esquemas, resolvers, N+1, límites de complejidad. REST perdona más la inexperiencia.
4. ¿Cómo va a evolucionar?
Los productos donde los frontends cambian constantemente y piden combinaciones nuevas de datos se benefician de la flexibilidad de GraphQL. Los dominios estables con operaciones claras viven muy cómodos en REST.
Los mitos, desmontados
- «GraphQL sustituye a REST»: no. Resuelve problemas distintos. Empresas con APIs públicas enormes siguen apostando por REST precisamente por su interoperabilidad.
- «REST es cosa del pasado»: tampoco. La inmensa mayoría de las APIs del mundo —y casi todas las de consumo público— son REST, y su ecosistema sigue creciendo.
- «Hay que elegir uno para siempre»: falso. Es perfectamente legítimo convivir: REST para la API pública y GraphQL como capa de agregación para frontends internos (el patrón BFF).
Nuestra recomendación, destilada
Después de construir ambas en producción, nuestra regla por defecto es sencilla:
- API pública, integraciones o un solo frontend → REST bien hecho, con OpenAPI, versionado y caché. Es aburrido, y aburrido en infraestructura es un cumplido.
- Varios clientes internos con necesidades de datos muy distintas → GraphQL, invirtiendo desde el día uno en límites de complejidad, caché de aplicación y observabilidad por operación.
- Duda razonable → REST. La flexibilidad de GraphQL se paga en operación; cómprala solo cuando el caso la justifique.
Sea cual sea la elección, lo que de verdad determina el éxito no es la tecnología sino el diseño del contrato, la coherencia del dominio detrás y la disciplina de mantenimiento. Una REST mediocre duele más que una GraphQL mediocre… y viceversa.
¿Lo resolvemos juntos?
Si estás diseñando una API nueva —o peleando con una que creció sin dirección— podemos ayudarte: revisamos tus consumidores, tu patrón de uso y tu equipo, y te recomendamos arquitectura con argumentos, no con modas. Cuéntanos tu caso y lo vemos.