CONCEPTOS BASE

GraphQL

Lenguaje de consulta y runtime para APIs donde el cliente define exactamente qué datos quiere recibir. Alternativa moderna a REST creada por Facebook en 2015.

Nivel · intermedio4 min de lecturaActualizado 22 may 2026
También conocido como: GraphQL API

Definición

GraphQL es un lenguaje de consulta para APIs y un runtime para resolver esas consultas con tus datos existentes. Lo creó Facebook en 2012 (open-source desde 2015) para resolver un problema concreto: sus apps móviles necesitaban consumir datos de muchos endpoints distintos y la red móvil era lenta.

A diferencia de REST, donde cada endpoint devuelve una estructura fija, en GraphQL el cliente declara qué datos quiere y el servidor le devuelve exactamente eso, ni más ni menos. Una sola petición puede traer datos de varias entidades relacionadas, sin múltiples round-trips.

GraphQL no es un competidor "mejor" de REST: es una alternativa con trade-offs distintos. Brilla en apps complejas con relaciones profundas (Shopify, GitHub, Twitter), pero añade complejidad operativa que no siempre compensa.

Cómo funciona

GraphQL tiene tres conceptos clave:

  1. Schema: define las entidades de tu API y sus relaciones (Producto, Cliente, Pedido) usando un sistema de tipos estricto.
  2. Query: el cliente envía una "consulta" que describe la estructura exacta de respuesta que quiere.
  3. Resolver: funciones en el servidor que saben cómo obtener cada campo (de base de datos, otra API, caché...).

Solo hay UN endpoint (típicamente /graphql) que recibe POST con la query. El servidor ejecuta los resolvers necesarios y devuelve JSON con la estructura solicitada.

Ejemplo práctico

Query que pide un producto + sus 3 últimas reseñas + el nombre del cliente de cada reseña, todo en una sola petición:

query {
  producto(id: 12345) {
    nombre
    precio
    stock
    resenas(limit: 3) {
      texto
      puntuacion
      cliente {
        nombre
      }
    }
  }
}

Respuesta JSON exacta:

{
  "data": {
    "producto": {
      "nombre": "Fresa carburo Ø10mm",
      "precio": 23.50,
      "stock": 47,
      "resenas": [
        { "texto": "Excelente", "puntuacion": 5, "cliente": { "nombre": "Talleres Ruiz" } },
        { "texto": "Buen filo", "puntuacion": 5, "cliente": { "nombre": "Mecanizados SL" } },
        { "texto": "Vida útil ok", "puntuacion": 4, "cliente": { "nombre": "Industrial Lopez" } }
      ]
    }
  }
}

En REST necesitarías 3+ peticiones: /productos/12345, /productos/12345/resenas?limit=3, y por cada reseña /clientes/{id}.

GraphQL vs REST

RESTGraphQL
EndpointsMuchos (/productos, /clientes...)Uno solo (/graphql)
Estructura respuestaFija (la define el servidor)Variable (la define el cliente)
Over-fetchingFrecuente (devuelve campos no usados)Cero
Under-fetchingFrecuente (necesitas varias llamadas)Cero
CachingFácil (URLs + verbos HTTP)Más complejo (todo es POST)
Curva de aprendizajeBajaMedia-alta
Tooling maduroTotalBueno y creciendo
Mejor paraAPIs públicas simplesApps internas con datos complejos

Errores comunes

  • Implementar GraphQL "porque es moderno": si tu app hace 5 peticiones REST simples, GraphQL solo añade complejidad. Solo justifica el cambio si tienes problemas reales de over/under-fetching.
  • N+1 queries en resolvers: si un resolver consulta la base por cada item de una lista, una query puede generar 100 queries SQL. Soluciona con DataLoader (batch + cache).
  • No limitar profundidad/complejidad de queries: un cliente malicioso puede mandar queries con 20 niveles de anidamiento y tirar tu servidor. Usa límites (query-complexity, query-depth-limit).
  • No pensar en caching: REST se cachea automáticamente en CDN. Con GraphQL necesitas estrategias propias (Apollo Cache, persisted queries, etc.).
  • Schema demasiado pegado a la base de datos: el schema debe modelar dominio, no tablas. Si tu schema parece un dump de tu DB, has perdido medio valor de GraphQL.

Cuándo elegir GraphQL

GraphQL brilla cuando:

  • Tu app tiene muchas vistas distintas que necesitan combinaciones distintas de datos
  • Tienes apps móviles donde minimizar payload y round-trips es crítico
  • Hay múltiples clientes (web, iOS, Android, partners) con necesidades de datos distintas
  • Tu modelo de dominio tiene muchas relaciones (entidades anidadas)

Quédate con REST cuando:

  • Tu API es simple (CRUD básico) y para uso interno
  • Las URLs cacheables importan (CDN, edge)
  • Tu equipo no tiene experiencia con GraphQL y la operativa extra no compensa
  • Necesitas que partners externos se integren rápido sin documentación profunda

Referencias

Comparado con
Escrito por
Antonio Echeverría

Dirijo IMDICA, una empresa de suministro industrial, desde 2007. Escribo estas definiciones desde el lado de quien las usa para decidir, no desde el de quien las estudia.

Si necesitas que alguien construya esto de verdad y no solo lo explique, eso es lo que hago en AE Works.