Lección 4 de 20 · Lectura y práctica
Práctica: Configurar una API para una Lista de Tareas
Concepto claveEn esta lección, aprenderás a configurar una API GraphQL para una lista de tareas usando Next.js y Apollo Server. Piensa en GraphQL como un menú de restaurante: en lugar de pedir platos fijos (como en REST),.
Del concepto a la práctica
Taller de esta lección
Una lista de tareas permite comprobar el recorrido completo de una API sin esconderse detrás de datos complejos. Elige una colección en memoria y define una consulta que filtre por estado; así puedes verificar argumento, esquema, resolver y forma de respuesta con tres registros conocidos.
Ejemplo resuelto
Datos: t1 Pendiente, t2 Hecha, t3 Pendiente. La operación tasks(status: PENDING) debe devolver t1 y t3, en ese orden. El resolver filtra por el campo interno status, no por el texto visible.
Define
enum TaskStatus { PENDING DONE }yTaskconid,titleystatus.Declara
tasks(status: TaskStatus): [Task!]!.Devuelve todas las tareas cuando
statussea nulo y filtra cuando tenga valor.Ejecuta consultas para
PENDING,DONEy sin argumento.
Error frecuente: comparar el enum con "Pendiente". Corrección: compara el valor interno PENDING y transforma la etiqueta solo en la capa de presentación.
Pruébalo
Añade una tarea t4 con estado DONE y repite las tres consultas.
Comprueba tu resultado
PENDING contiene exactamente t1,t3, DONE contiene t2,t4 y la consulta sin filtro contiene cuatro registros, sin elementos nulos.
Esquema y filtro reproducibles
enum TaskStatus { PENDING DONE }
type Task { id: ID!, title: String!, status: TaskStatus! }
type Query { tasks(status: TaskStatus): [Task!]! }Usa t1/Mapa/PENDING, t2/Pruebas/DONE, t3/Documentar/PENDING y t4/Entrega/DONE. El resolver devuelve la colección si args.status es null o undefined; en otro caso filtra por ese valor exacto. Escribir PENDIENTE se rechaza porque no pertenece al enum. Prueba también la lista inicial vacía: devuelve [], nunca null. Los datos en memoria son un fixture local, no almacenamiento compartido de producción.

Mapa de prácticaEl navegador envía una solicitud a la API. El servidor valida la operación y consulta los datos; después devuelve una respuesta que el navegador puede mostrar. La base de datos se comunica con el servidor y no directamente con el navegador.
Ver la infografía en tamaño completo ↗Fuentes para profundizar
Concepto clave
En esta lección, aprenderás a configurar una API GraphQL para una lista de tareas usando Next.js y Apollo Server. Piensa en GraphQL como un menú de restaurante: en lugar de pedir platos fijos (como en REST), especificas exactamente qué datos necesitas (los ingredientes) y en qué formato. Esto reduce la sobrecarga de datos y mejora el rendimiento. Para una lista de tareas, esto significa que puedes solicitar solo los campos relevantes (como título y estado) sin traer información innecesaria.
La configuración implica definir un esquema tipado que describe la estructura de tus datos (por ejemplo, qué campos tiene una tarea) y resolvers que indican cómo obtener esos datos. Apollo Server actúa como el intermediario que procesa las consultas GraphQL y devuelve respuestas estructuradas. En un contexto profesional, esto te permite construir APIs más eficientes y escalables, clave para roles de Full Stack Developer.
Cómo funciona en la práctica
Vamos a configurar paso a paso una API para una lista de tareas. Primero, instala las dependencias necesarias en tu proyecto Next.js: npm install apollo-server-micro graphql. Luego, crea un archivo pages/api/graphql.js para alojar tu API GraphQL.
Define el esquema GraphQL en este archivo. Por ejemplo:
const typeDefs = gql`
type Task {
id: ID!
title: String!
completed: Boolean!
}
type Query {
tasks: [Task]
}
`;Aquí, Task es un tipo con campos obligatorios (!), y Query define una operación para obtener todas las tareas. Luego, implementa resolvers para proporcionar los datos, como una lista en memoria o una conexión a base de datos. Finalmente, configura Apollo Server para manejar las solicitudes GraphQL en la ruta /api/graphql.
Caso de estudio
Imagina que estás construyendo una aplicación de productividad para una startup. La API necesita manejar tareas con campos como título, descripción, fecha de vencimiento y prioridad. Usando GraphQL, puedes optimizar las consultas para diferentes partes de la app: el dashboard solo pide título y estado, mientras que la página de detalles solicita todos los campos.
Configura el esquema para incluir estos campos y prueba con una consulta como:
query {
tasks {
title
dueDate
priority
}
}Esto devuelve solo los datos necesarios, reduciendo el ancho de banda y mejorando la velocidad de carga. En la práctica, esto se traduce en una mejor experiencia de usuario y costos más bajos en infraestructura.
Errores comunes
- No validar el esquema: Asegúrate de que los tipos en tu esquema coincidan con los datos reales. Usa herramientas como GraphQL Code Generator para evitar discrepancias.
- Resolver mal estructurado: Los resolvers deben devolver datos en el formato exacto definido por el esquema. Por ejemplo, si
tasksespera un array, no devuelvas un objeto. - Ignorar el manejo de errores: GraphQL puede devolver errores parciales. Implementa manejo de errores en los resolvers para proporcionar respuestas claras al cliente.
- Sobrecargar las consultas: Evita consultas demasiado complejas que pidan muchos campos anidados; esto puede ralentizar la API. Optimiza con paginación o fragmentos.
- Olvidar la seguridad: Protege tu API con autenticación y autorización, especialmente en operaciones de mutación (como añadir tareas).
Checklist de dominio
- Instalé correctamente Apollo Server y GraphQL en un proyecto Next.js.
- Definí un esquema GraphQL tipado para una entidad como
Task. - Implementé resolvers básicos que devuelven datos de ejemplo o de una fuente.
- Configuré una ruta de API en
/api/graphqlque responde a consultas GraphQL. - Probé la API con una herramienta como GraphQL Playground o Apollo Studio.
- Validé que las consultas devuelven solo los campos solicitados.
- Documenté el esquema y las operaciones disponibles para futuros desarrolladores.
Configura una API GraphQL para gestionar tareas en Next.js
Sigue estos pasos para crear una API GraphQL funcional que maneje una lista de tareas:
- Inicia un nuevo proyecto Next.js si no tienes uno:
npx create-next-app@latest task-api. - Instala las dependencias necesarias:
npm install apollo-server-micro graphql. - Crea un archivo
pages/api/graphql.jsy configura Apollo Server básico con un esquema que incluya un tipoTaskcon camposid,title, ycompleted. - Implementa un resolver para la consulta
tasksque devuelva un array de al menos 3 tareas de ejemplo (puedes usar datos en memoria). - Inicia el servidor de desarrollo con
npm run devy accede ahttp://localhost:3000/api/graphqlpara probar tu API. - Ejecuta una consulta GraphQL para obtener todas las tareas y verifica que los datos se devuelvan correctamente.
Pistas
- Usa
gqlde la bibliotecagraphqlpara definir tu esquema en una plantilla literal. - Asegúrate de exportar el manejador de Apollo Server como default en
pages/api/graphql.jspara que Next.js lo reconozca. - Si encuentras errores, revisa la consola del servidor para mensajes de depuración.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.
Sigue con GraphQL Profesional con Next.js y Apollo Server: APIs Tipadas y Suscripciones
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.