En este módulo, aprenderemos a construir una aplicación full-stack utilizando GraphQL. Este proceso implicará tanto el desarrollo del servidor GraphQL como la integración con un cliente front-end. A lo largo de este tema, cubriremos los siguientes puntos:
- Configuración del Servidor GraphQL
- Definición del Esquema y Resolvers
- Configuración del Cliente Front-end
- Integración del Cliente con el Servidor
- Pruebas y Despliegue
- Configuración del Servidor GraphQL
Paso 1: Inicializar el Proyecto
Primero, necesitamos crear un nuevo proyecto Node.js. Abre tu terminal y ejecuta los siguientes comandos:
Paso 2: Instalar Dependencias
Instalaremos las dependencias necesarias para configurar un servidor GraphQL con Express y Apollo Server.
Paso 3: Configurar el Servidor
Crea un archivo index.js
en la raíz del proyecto y añade el siguiente código para configurar el servidor Express y Apollo Server:
const express = require('express'); const { ApolloServer, gql } = require('apollo-server-express'); const app = express(); // Definición del esquema const typeDefs = gql` type Query { hello: String } `; // Definición de los resolvers const resolvers = { Query: { hello: () => 'Hello, world!', }, }; // Configuración del servidor Apollo const server = new ApolloServer({ typeDefs, resolvers }); server.applyMiddleware({ app }); app.listen({ port: 4000 }, () => console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`) );
Este código configura un servidor básico de GraphQL que responde a una consulta hello
.
- Definición del Esquema y Resolvers
Paso 1: Definir el Esquema
Vamos a expandir nuestro esquema para incluir un modelo de usuario. Modifica el archivo index.js
para incluir el siguiente esquema:
const typeDefs = gql` type User { id: ID! name: String! email: String! } type Query { users: [User] } type Mutation { addUser(name: String!, email: String!): User } `;
Paso 2: Definir los Resolvers
Añade los resolvers para manejar las consultas y mutaciones:
let users = []; const resolvers = { Query: { users: () => users, }, Mutation: { addUser: (_, { name, email }) => { const user = { id: users.length + 1, name, email }; users.push(user); return user; }, }, };
- Configuración del Cliente Front-end
Paso 1: Crear el Proyecto React
En una nueva terminal, crea un proyecto React utilizando Create React App:
Paso 2: Instalar Apollo Client
Instala las dependencias necesarias para Apollo Client:
Paso 3: Configurar Apollo Client
En el archivo src/index.js
, configura Apollo Client:
import React from 'react'; import ReactDOM from 'react-dom'; import { ApolloProvider, InMemoryCache, ApolloClient } from '@apollo/client'; import App from './App'; const client = new ApolloClient({ uri: 'http://localhost:4000/graphql', cache: new InMemoryCache(), }); ReactDOM.render( <ApolloProvider client={client}> <App /> </ApolloProvider>, document.getElementById('root') );
- Integración del Cliente con el Servidor
Paso 1: Crear Componentes
Crea un componente UserList
para mostrar la lista de usuarios y un componente AddUser
para añadir nuevos usuarios.
UserList.js
import React from 'react'; import { useQuery, gql } from '@apollo/client'; const GET_USERS = gql` query GetUsers { users { id name email } } `; const UserList = () => { const { loading, error, data } = useQuery(GET_USERS); if (loading) return <p>Loading...</p>; if (error) return <p>Error :(</p>; return ( <ul> {data.users.map(({ id, name, email }) => ( <li key={id}> {name} - {email} </li> ))} </ul> ); }; export default UserList;
AddUser.js
import React, { useState } from 'react'; import { useMutation, gql } from '@apollo/client'; const ADD_USER = gql` mutation AddUser($name: String!, $email: String!) { addUser(name: $name, email: $email) { id name email } } `; const AddUser = () => { const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [addUser] = useMutation(ADD_USER); const handleSubmit = (e) => { e.preventDefault(); addUser({ variables: { name, email } }); setName(''); setEmail(''); }; return ( <form onSubmit={handleSubmit}> <input type="text" placeholder="Name" value={name} onChange={(e) => setName(e.target.value)} /> <input type="email" placeholder="Email" value={email} onChange={(e) => setEmail(e.target.value)} /> <button type="submit">Add User</button> </form> ); }; export default AddUser;
Paso 2: Integrar Componentes en la Aplicación
Modifica el archivo src/App.js
para incluir los componentes UserList
y AddUser
:
import React from 'react'; import UserList from './UserList'; import AddUser from './AddUser'; const App = () => ( <div> <h1>Users</h1> <AddUser /> <UserList /> </div> ); export default App;
- Pruebas y Despliegue
Pruebas
Para probar la aplicación, asegúrate de que el servidor y el cliente estén ejecutándose:
Despliegue
Para desplegar la aplicación, puedes utilizar servicios como Heroku, Vercel o Netlify. Asegúrate de configurar correctamente las variables de entorno y los scripts de despliegue.
Conclusión
En este tema, hemos construido una aplicación full-stack utilizando GraphQL. Hemos cubierto la configuración del servidor, la definición del esquema y los resolvers, la configuración del cliente front-end y la integración de ambos. Además, hemos visto cómo probar y desplegar la aplicación. Con estos conocimientos, estás preparado para construir aplicaciones más complejas y robustas utilizando GraphQL.
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