En esta sección, aprenderemos cómo configurar un servidor GraphQL desde cero. Utilizaremos Node.js y Express junto con la biblioteca graphql
y express-graphql
para crear nuestro servidor. Al final de esta lección, tendrás un servidor GraphQL básico en funcionamiento.
Requisitos Previos
Antes de comenzar, asegúrate de tener instalado Node.js y npm en tu máquina. Puedes descargar Node.js desde aquí.
Paso 1: Crear un Proyecto Node.js
Primero, crea un nuevo directorio para tu proyecto y navega a él en tu terminal:
Inicializa un nuevo proyecto Node.js:
Esto creará un archivo package.json
en tu directorio.
Paso 2: Instalar Dependencias
Instalaremos las siguientes dependencias:
express
: Un framework web para Node.js.graphql
: La biblioteca principal de GraphQL.express-graphql
: Middleware para integrar GraphQL con Express.
Ejecuta el siguiente comando para instalar estas dependencias:
Paso 3: Configurar el Servidor Express
Crea un archivo llamado index.js
en el directorio raíz de tu proyecto. Este archivo contendrá la configuración de nuestro servidor Express.
const express = require('express'); const { graphqlHTTP } = require('express-graphql'); const { buildSchema } = require('graphql'); // Definir el esquema de GraphQL const schema = buildSchema(` type Query { hello: String } `); // Definir los resolvers const root = { hello: () => { return 'Hello, world!'; }, }; // Crear una instancia de Express const app = express(); // Configurar el endpoint de GraphQL app.use('/graphql', graphqlHTTP({ schema: schema, rootValue: root, graphiql: true, // Habilitar GraphiQL para pruebas })); // Iniciar el servidor app.listen(4000, () => { console.log('Servidor GraphQL ejecutándose en http://localhost:4000/graphql'); });
Explicación del Código
-
Importar Módulos:
const express = require('express'); const { graphqlHTTP } = require('express-graphql'); const { buildSchema } = require('graphql');
Importamos los módulos necesarios para configurar nuestro servidor.
-
Definir el Esquema de GraphQL:
const schema = buildSchema(` type Query { hello: String } `);
Definimos un esquema simple con un tipo
Query
que tiene un campohello
que devuelve una cadena. -
Definir los Resolvers:
const root = { hello: () => { return 'Hello, world!'; }, };
Definimos los resolvers que proporcionan la lógica para obtener los datos solicitados en las consultas.
-
Crear una Instancia de Express:
const app = express();
Creamos una instancia de la aplicación Express.
-
Configurar el Endpoint de GraphQL:
app.use('/graphql', graphqlHTTP({ schema: schema, rootValue: root, graphiql: true, }));
Configuramos el middleware
express-graphql
en la ruta/graphql
y habilitamos GraphiQL, una interfaz de usuario para probar consultas GraphQL. -
Iniciar el Servidor:
app.listen(4000, () => { console.log('Servidor GraphQL ejecutándose en http://localhost:4000/graphql'); });
Iniciamos el servidor en el puerto 4000 y mostramos un mensaje en la consola.
Paso 4: Probar el Servidor
Para probar tu servidor GraphQL, abre tu navegador y navega a http://localhost:4000/graphql
. Deberías ver la interfaz de GraphiQL.
En la interfaz de GraphiQL, puedes ejecutar la siguiente consulta:
Deberías recibir la siguiente respuesta:
Ejercicio Práctico
Ejercicio 1: Añadir un Nuevo Campo al Esquema
Añade un nuevo campo greet
al esquema que acepte un argumento name
y devuelva un saludo personalizado.
Solución
-
Modifica el esquema para incluir el nuevo campo:
const schema = buildSchema(` type Query { hello: String greet(name: String!): String } `);
-
Añade el resolver para el nuevo campo:
const root = { hello: () => { return 'Hello, world!'; }, greet: ({ name }) => { return `Hello, ${name}!`; }, };
-
Prueba la nueva consulta en GraphiQL:
{ greet(name: "GraphQL") }
Deberías recibir la siguiente respuesta:
{ "data": { "greet": "Hello, GraphQL!" } }
Conclusión
En esta lección, hemos configurado un servidor GraphQL básico utilizando Node.js, Express, y express-graphql
. Hemos aprendido a definir un esquema simple y a crear resolvers para manejar las consultas. En el próximo módulo, profundizaremos en los conceptos fundamentales de GraphQL, como consultas, mutaciones y resolvers.
Curso de GraphQL
Módulo 1: Introducción a GraphQL
- ¿Qué es GraphQL?
- GraphQL vs REST
- Configuración de un Servidor GraphQL
- Conceptos Básicos del Esquema de GraphQL
Módulo 2: Conceptos Fundamentales
Módulo 3: Diseño Avanzado de Esquemas
Módulo 4: Trabajando con Datos
Módulo 5: Rendimiento y Seguridad
Módulo 6: Herramientas y Ecosistema
Módulo 7: Pruebas y Despliegue
- Pruebas Unitarias de Resolvers
- Pruebas de Integración
- Integración Continua
- Despliegue de Servidores GraphQL