Nested Types
Clase 12 de 25 • Curso Práctico de GraphQL con JavaScript
¿Cómo crear relaciones entre tipos en GraphQL?
GraphQL nos brinda la habilidad de establecer relaciones entre tipos de manera sencilla, lo que nos permite modelar datos más complejos. En esta guía, aprenderás cómo agregar un campo de tipo arreglo que representa una relación con otros tipos y cómo crear un mutation para actualizar y manejar estas relaciones.
¿Cómo definir y actualizar un campo tipo arreglo?
Un aspecto esencial al trabajar en GraphQL es aprender a crear campos de tipo arreglo que contienen elementos de otro tipo. Aquí te mostramos cómo hacerlo.
-
Definición del campo en el esquema:
- Vamos a definir en nuestro esquema que un
Cursotenga un campo llamadopipo, el cual será un arreglo de tipoEstudiante.
type Curso { id: ID! nombre: String! pipo: [Estudiante] } - Vamos a definir en nuestro esquema que un
-
Crear una función mutation:
- Necesitamos crear una nueva mutation que nos permita agregar un
Estudiantea unCurso.
type Mutation { addPipo(courseId: ID!, personId: ID!): Curso } - Necesitamos crear una nueva mutation que nos permita agregar un
¿Cómo implementar el resolver para la mutation?
Una vez definido el esquema, el siguiente paso es implementar el resolver que realizará las operaciones necesarias para vincular el estudiante al curso.
-
Conexión a la base de datos:
- Asegúrate de conectar correctamente la base de datos y manejar errores potenciales.
-
Validación y recuperación de datos:
- Verifica que el curso y el estudiante existan en la base de datos.
-
Actualización de los datos:
- Utiliza un operador de actualización
addToSetpara agregar el ID del estudiante al arreglo en el documento del curso.
async function addPipo(_, { courseId, personId }) { try { const curso = await db.courses.findById(courseId); const persona = await db.persons.findById(personId); if (!curso || !persona) { throw new Error('El curso o la persona no existe'); } await db.courses.updateOne( { _id: courseId }, { $addToSet: { pipo: personId } } ); return curso; } catch (error) { console.error(error); throw new Error('Error al actualizar curso'); } } - Utiliza un operador de actualización
¿Cómo comprobar y probar la implementación?
Una vez implementado el resolver, es crucial verificar que todo funcione correctamente mediante pruebas.
-
Utiliza herramientas de prueba:
- Usa aplicaciones como GraphiQL o Apollo Studio para enviar requests a tu API y confirmar que los estudiantes se agreguen correctamente al curso.
-
Observa los resultados directamente en la base de datos:
- Verifica en tu base de datos que el campo
pipodel curso contenga los IDs de los estudiantes correctos.
- Verifica en tu base de datos que el campo
-
Asegúrate de cumplir con las expectativas del cliente:
- Comprobar que el resolver devuelva el curso correctamente actualizado como respuesta de la mutation.
¿Cómo implementar y verificar mejoras?
Al incorporar este tipo de funcionalidad en una aplicación, siempre debes buscar maneras de mejorar y optimizar.
-
Manejo de errores más específicos:
- Implementa mejores mecanismos para identificar y notificar errores específicos durante el proceso de ejecución.
-
Documentación y claridad del código:
- Asegúrate de que tu código esté comentado y documentado adecuadamente para facilitar el mantenimiento.
-
Más verificaciones de datos:
- Implementa validaciones adicionales para mejorar la integridad de los datos manejados.
Aprender a manejar relaciones entre tipos en GraphQL amplía las capacidades de tu API y es un paso más hacia la construcción de sistemas robustos y flexibles. ¡Sigue explorando y experimentando para perfeccionar tus habilidades!