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:

mkdir graphql-server
cd graphql-server

Inicializa un nuevo proyecto Node.js:

npm init -y

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:

npm install express graphql express-graphql

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

  1. 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.

  2. Definir el Esquema de GraphQL:

    const schema = buildSchema(`
      type Query {
        hello: String
      }
    `);
    

    Definimos un esquema simple con un tipo Query que tiene un campo hello que devuelve una cadena.

  3. 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.

  4. Crear una Instancia de Express:

    const app = express();
    

    Creamos una instancia de la aplicación Express.

  5. 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.

  6. 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:

{
  hello
}

Deberías recibir la siguiente respuesta:

{
  "data": {
    "hello": "Hello, world!"
  }
}

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

  1. Modifica el esquema para incluir el nuevo campo:

    const schema = buildSchema(`
      type Query {
        hello: String
        greet(name: String!): String
      }
    `);
    
  2. Añade el resolver para el nuevo campo:

    const root = {
      hello: () => {
        return 'Hello, world!';
      },
      greet: ({ name }) => {
        return `Hello, ${name}!`;
      },
    };
    
  3. 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.

© Copyright 2024. Todos los derechos reservados