Saltar al contenido

APIs REST vs GraphQL: cuándo usar cada una sin caer en el hype

CS
Chakana Studio Software
· · 7 min de lectura

GraphQL apareció en el radar de muchos equipos como “la evolución de REST”. La narrativa era simple: REST tiene problemas (over-fetching, under-fetching, versioning), GraphQL los resuelve. Usa GraphQL.

La realidad, como siempre, es más matizada.

Los problemas reales de REST (y cuándo importan)

REST tiene problemas conocidos:

Over-fetching: un endpoint /usuarios/:id devuelve nombre, email, foto, dirección, configuraciones, historial — cuando el cliente solo necesita el nombre y el email. Estás transfiriendo más datos de los necesarios.

Under-fetching: para mostrar un perfil completo, el cliente necesita llamar /usuarios/:id, luego /usuarios/:id/pedidos, luego /productos/:id para cada pedido. Tres requests donde podría ser uno.

Versioning: cuando cambias la estructura de una respuesta, necesitas crear /api/v2/... para no romper clientes existentes. Con el tiempo, mantienes múltiples versiones.

Estos son problemas reales. La pregunta es: ¿son problemas reales para tu caso?

Cuándo REST es la elección correcta

Para la mayoría de APIs de aplicaciones web y móviles, REST sigue siendo la opción más pragmática.

CRUD simple: si tu API es mayormente crear, leer, actualizar y eliminar recursos — usuarios, productos, pedidos — REST es natural y fácil de entender para cualquier desarrollador.

Equipos pequeños: el overhead de configurar GraphQL (schema, resolvers, herramientas de introspección, manejo de errores diferente) tiene un costo real en tiempo de desarrollo. Para equipos de 2-3 personas, ese tiempo generalmente no se justifica.

APIs públicas: REST con buena documentación (OpenAPI/Swagger) es más accesible para desarrolladores externos que GraphQL. Stripe, Twilio, GitHub usan REST porque es el estándar que cualquier desarrollador puede integrar.

Caché HTTP: REST puede aprovechar el caché HTTP estándar. Una respuesta de GET /productos se puede cachear fácilmente en el browser, en un CDN o en un proxy. GraphQL, al usar POST para queries, no se beneficia del caché HTTP de forma nativa.

Cuándo GraphQL resuelve un problema real

Múltiples clientes con necesidades diferentes: una app móvil que necesita datos mínimos (para ahorrar ancho de banda) y un dashboard web que necesita datos completos. Con REST, necesitas endpoints específicos para cada caso o aceptar over-fetching. Con GraphQL, cada cliente pide exactamente lo que necesita.

Datos altamente relacionados y anidados: un feed social donde cada post tiene un autor, el autor tiene seguidores, cada seguidor tiene sus posts… Navegar esa estructura con REST requiere múltiples requests o endpoints personalizados. GraphQL lo resuelve con una sola query.

Desarrollo frontend/backend paralelo: el equipo de frontend puede comenzar a trabajar con un schema definido sin esperar a que el backend implemente todos los endpoints específicos.

Sistemas con muchas entidades relacionadas: plataformas complejas tipo ERP o CRM donde las relaciones entre entidades son profundas y los reportes requieren combinar muchos recursos.

Lo que no te dicen de GraphQL

La complejidad se mueve al servidor: el over-fetching desaparece del cliente, pero el servidor ahora tiene que resolver consultas arbitrariamente complejas. Sin control, un cliente puede hacer una query que tarda minutos y destruye la base de datos.

El manejo de errores es diferente (y confuso al inicio): GraphQL siempre responde con status 200 — los errores van dentro del JSON de respuesta. Esto rompe las convenciones de monitoreo y logging que los equipos tienen para REST.

El caché es más complejo: sin el caché HTTP estándar, necesitas soluciones específicas (Apollo Client cache, Relay). Son buenas herramientas, pero añaden complejidad.

N+1 queries: sin cuidado, GraphQL puede generar docenas de queries a la base de datos para resolver una sola petición. El patrón DataLoader existe para resolverlo, pero hay que implementarlo.

Nuestra decisión en proyectos reales

Para el 80% de proyectos usamos REST. Los criterios:

  • CRUD estándar → REST
  • API consumida por un solo cliente con necesidades estables → REST
  • Equipo pequeño, tiempo limitado → REST

Elegimos GraphQL cuando:

  • Múltiples tipos de clientes con necesidades muy diferentes
  • El producto es una plataforma donde terceros construirán sobre nuestra API
  • Las relaciones entre entidades son profundas y el equipo tiene experiencia con GraphQL

Lo que nunca hacemos: elegir GraphQL porque “es lo moderno” o REST porque “es lo que siempre usamos”. La arquitectura tiene que servir al producto, no al revés.

Compartir artículo

Hablemos

De tu idea
al
producto.

Una conversación de 15 minutos aclara más que un brief de 3 páginas. Te decimos si podemos ayudarte, cuánto costaría y cuándo estaría listo.

Iniciar proyecto WhatsApp directo

Respuesta en menos de 24h

Precio y alcance fijos por escrito Demos en vivo cada 2 semanas El código y los datos son tuyos