Nested Types
Clase 12 de 25 • Curso Práctico de GraphQL con JavaScript
Contenido del curso
- 3

Schema y types
06:09 - 4

Queries y Resolvers
05:09 - 5

Sirviendo el API en la web
07:57 - 6

Custom Types
12:06 - 7

Argumentos
08:11 - 8

Configuración de base de datos
11:21 - 9

Integrando una base de datos
09:58 - 10

Mutations e Inputs
14:29 - 11

Repaso - Creando el tipo Estudiante
16:23 - 12

Nested Types
11:22 - 13

Resolver de tipos
08:45 - 14

Errores
08:50
¿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!