¿Qué es GraphQL?
GraphQL es una forma moderna de que un cliente (web, móvil, backend, etc.) obtenga datos desde un servidor. Fue creado por Facebook y hoy es un estándar muy usado.
Por qué existe
- Overfetching: pedís demasiados datos.
- Underfetching: pedís pocos y necesitás muchas llamadas.
- Versionar la API se vuelve un lío.
GraphQL resuelve esto permitiéndote definir la forma exacta de la respuesta.
Cómo funciona la idea
Consulta GraphQL
query {
usuario(id: 1) {
nombre
email
direccion {
ciudad
}
}
}
Respuesta del servidor
{
"data": {
"usuario": {
"nombre": "elusuaro",
"email": "usuario@example.com",
"direccion": {
"ciudad": "Buenos Aires"
}
}
}
}
El cliente define qué campos quiere y recibe solo eso.
Conceptos clave
- Schema: estructura de tipos y consultas permitidas.
- Queries: obtener datos.
- Mutations: modificar datos.
- Resolvers: funciones que devuelven los datos.
- Types: definen modelos (Usuario, Producto, etc.).
Ventajas
- Pedís exactamente los datos necesarios.
- Una sola URL para toda la API.
- Autodocumentada (GraphiQL, Apollo Sandbox).
- Más flexible que REST.
- Ideal para frontends modernos (React, Next.js, móviles).
Desventajas
- Curva de aprendizaje mayor.
- Puede sobrecargar el servidor sin límites adecuados.
- No es ideal para todo (archivos grandes o endpoints simples).
¿Cuándo conviene usarlo?
- Apps con mucha interacción y datos relacionados.
- Cuando el frontend necesita mucha flexibilidad.
Material complementario
- Definición de GraphQL: lenguaje de consulta y sistema de ejecución para APIs que permite a los clientes especificar exactamente qué datos necesitan. Alternativa flexible y eficiente frente a REST.
- Modelo de funcionamiento: un único endpoint recibe consultas estructuradas; el servidor valida, ejecuta y responde según lo pedido.
- El Schema: núcleo de la API, define tipos, campos, relaciones y operaciones (queries, mutations, subscriptions). Es fuertemente tipado.
- Queries: operaciones de lectura que devuelven exactamente lo solicitado, sin más ni menos.
- Mutations: operaciones que modifican datos, ejecutadas secuencialmente para garantizar consistencia.
- Resolvers: funciones que obtienen el valor de cada campo desde cualquier fuente de datos (SQL, NoSQL, microservicios, etc.).
- Tipado estricto: sistema de tipos fuerte y explícito que permite validación, autocompletado y documentación automática.
- Introspección: capacidad del servidor de exponer información completa sobre el schema, útil para documentación y herramientas interactivas.
- Diferencias con REST: en REST los endpoints definen recursos; en GraphQL existe un único punto de acceso y el cliente define la forma de la respuesta.
- Arquitectura en sistemas complejos: capa unificadora delante de múltiples fuentes de datos, ideal para microservicios y sistemas distribuidos.
- Ejecución de consultas: flujo definido: validación contra el schema, ejecución de resolvers y ensamblado de la respuesta final.
- Evolución sin versionado: nuevos campos y tipos se agregan sin afectar clientes existentes; se gestionan deprecaciones en el schema.