Biblioteca GraphQL JavaScript (Node.js): Guía completa de Apollo Server y herramientas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Biblioteca GraphQL para Node.js: Apollo Server y herramientas de desarrollo



GraphQL es un lenguaje de consultas para API que permite a los clientes solicitar solo los datos que necesitan. Para el desarrollo en Node.js, la biblioteca más popular es Apollo Server. Proporciona un conjunto completo de herramientas para crear, probar e implementar API GraphQL. En este artículo, analizaremos en detalle los componentes clave, los enfoques y los ejemplos de código.



¿Qué es Apollo Server?

Apollo Server es una biblioteca de código abierto que permite crear rápidamente un servidor GraphQL en Node.js. Admite múltiples transportes (HTTP, WebSocket) y se integra fácilmente con frameworks (Express, Koa, Fastify). Las principales características son:

  • Generación automática de documentación a través de GraphQL Playground.
  • Soporte para suscripciones (subscriptions) a través de WebSocket.
  • Mecanismo de almacenamiento en caché y combinación de datos (data loaders).
  • Sistema flexible de middleware para autenticación y autorización.


Instalación y configuración básica

Para empezar, instale los paquetes apollo-server y graphql:

npm install apollo-server graphql


Cree un servidor simple que devuelva un saludo:

const { ApolloServer, gql } = require('apollo-server');

// Definimos el esquema (SDL)const typeDefs = gql` type Query { hello: String }`;

// Resolutores: funciones que devuelven datosconst resolvers = { Query: { hello: () => '¡Hola, GraphQL!', },};

// Iniciamos el servidorconst server = new ApolloServer({ typeDefs, resolvers });server.listen().then(({ url }) => { console.log(`🚀 Servidor iniciado en ${url}`);});


Tipos de datos y esquemas

En GraphQL, el esquema define todos los tipos y operaciones disponibles. Los tipos principales son:

  • String, Int, Float, Boolean, ID — tipos escalares.
  • [Type] — lista de objetos.
  • type — objeto personalizado.
  • input — tipo para parámetros de entrada de mutaciones.


Ejemplo de esquema para un blog:

type User {  id: ID!  name: String!  posts: [Post!]!}

type Post { id: ID! title: String! content: String! author: User!}

type Query { user(id: ID!): User posts(limit: Int): [Post!]!}

type Mutation { createUser(name: String!): User!}


Resolutores: conexión del esquema con los datos

Cada campo del esquema debe tener un resolutor correspondiente. Los resolutores pueden obtener datos de una base de datos (MongoDB, PostgreSQL), API externas o arreglos estáticos.

const users = [  { id: '1', name: 'Ana' },  { id: '2', name: 'Boris' },];

const posts = [ { id: '10', title: 'GraphQL para principiantes', content: '...', authorId: '1' }, { id: '20', title: 'Consejos de Node.js', content: '...', authorId: '2' },];

const resolvers = { Query: { user: (_, { id }) => users.find(u => u.id === id), posts: (_, { limit }) => limit ? posts.slice(0, limit) : posts, }, Mutation: { createUser: (_, { name }) => { const newUser = { id: String(users.length + 1), name }; users.push(newUser); return newUser; }, }, User: { posts: (parent) => posts.filter(p => p.authorId === parent.id), },};


Enfoque code-first con TypeGraphQL

Para proyectos grandes, es más conveniente utilizar el enfoque code-first, donde el esquema se genera a partir de clases de TypeScript. La biblioteca type-graphql permite escribir código que es tanto tipo como resolutor.

npm install type-graphql reflect-metadata class-validator


Ejemplo de clase de entidad:

import { ObjectType, Field,                    

Recommendations