🔮

GraphQL

GraphQL es un lenguaje de consulta y runtime para APIs desarrollado por Facebook en 2012 y open-sourced en 2015. A diferencia de REST, donde cada endpoint devuelve una estructura fija, GraphQL permite al cliente especificar exactamente qué campos necesita en una sola query, reduciendo over-fetching, under-fetching y múltiples requests.

Ejemplos

  • query { user(id: 42) { name email posts { title createdAt } } }
  • mutation { createPost(title: "Hello", body: "World") { id createdAt } }
  • subscription { postCreated { id title author { name } } }
  • query GetUser($id: ID!) { user(id: $id) { name posts(first: 10) { edges { node { title } } } } }
  • { users { id name } posts: allPosts { title } }

Preguntas frecuentes

¿GraphQL reemplaza a REST?

No necesariamente. GraphQL resuelve problemas específicos (over-fetching, múltiples requests, flexibilidad). REST sigue siendo mejor para APIs públicas simples, cache HTTP, y cuando no necesitás queries complejas. Muchas empresas usan ambos según el caso.

¿Cómo manejo autenticación en GraphQL?

Igual que REST: enviás un token (JWT, OAuth) en el header Authorization. Los resolvers verifican permisos antes de devolver datos. Librerías como graphql-shield permiten definir reglas de autorización declarativas a nivel campo o tipo.

¿Qué es el problema N+1 y cómo lo soluciono?

Si una query pide users y sus posts, sin batching harías 1 query para users + N queries (una por user) para posts. DataLoader agrupa las N queries en una sola: SELECT * FROM posts WHERE user_id IN (...). Es esencial en GraphQL; sin DataLoader, las queries anidadas son lentas.