Repaso - Creando el tipo Estudiante
Clase 11 de 25 • Curso Práctico de GraphQL con JavaScript
¿Cómo agregar un nuevo tipo a nuestro directorio?
En el emocionante viaje del desarrollo web, GraphQL se destaca como una herramienta esencial para la gestión eficiente de datos. En este artículo, exploraremos cómo agregar un nuevo tipo a nuestro esquema de GraphQL, junto con los resolvers, queries y mutations necesarios para hacer que todo funcione perfectamente.
¿Qué es un tipo y cómo definirlo?
En GraphQL, un tipo es una definición de cómo deben verse los objetos en nuestra API. Estos determinan qué datos están disponibles para nuestras queries y mutations. Para crear un tipo llamado Student, seguimos estos pasos:
- Declaramos el nuevo tipo
Studentcon campos obligatorios:id: tipoID!name: tipoString!email: tipoString!
Esto se vería de la siguiente manera:
type Student {
id: ID!
name: String!
email: String!
}
¿Cómo crear resolvers y queries para el nuevo tipo?
Una vez que hemos definido el tipo, es necesario crear resolvers que permitan interactuar con los datos. Para los estudiantes, queremos devolver todos los estudiantes o un estudiante específico:
type Query {
students: [Student]
student(id: ID!): Student
}
Los resolvers para estas queries se implementan así:
const resolvers = {
Query: {
students: async () => {
return await StudentModel.find();
},
student: async (_, { id }) => {
return await StudentModel.findById(id);
}
}
}
¿Cómo incluir el input type y las mutations?
El siguiente paso es permitir la creación y edición de estudiantes mediante mutation. Definimos un input type para pasar los datos al resolver:
input StudentInput {
name: String!
email: String!
}
Creamos la mutation para añadir y editar:
type Mutation {
createStudent(input: StudentInput): Student
updateStudent(id: ID!, input: StudentInput): Student
}
Y definimos los resolvers correspondientes:
const resolvers = {
Mutation: {
createStudent: async (_, { input }) => {
const newStudent = new StudentModel(input);
return await newStudent.save();
},
updateStudent: async (_, { id, input }) => {
return await StudentModel.findByIdAndUpdate(id, input, { new: true });
}
}
}
¿Cómo realizar tests a las funciones creadas?
Realizar tests es fundamental para asegurarse de que todo funciona conforme a lo esperado. Puedes utilizar herramientas como Apollo Server para ejecutar instantáneamente tus queries y mutations.
Prueba crear un estudiante con la mutation createStudent:
mutation {
createStudent(input: { name: "Estudiante Uno", email: "estudiante1@email.com" }) {
id
name
email
}
}
Y verifica la correcta inserción consultando todos los estudiantes:
query {
students {
id
name
email
}
}
¿Cómo puedes mejorar y extender esta funcionalidad?
Para quienes desean un reto adicional, intenta crear una nueva función de mutation para eliminar tanto estudiantes como cursos. Esto te ayudará a afinar tus habilidades con GraphQL y prepararte para proyectos más complejos.
No olvides seguir explorando e integrando nuevos tipos, resolvers, y tecnologías a tu stack de desarrollo. ¡Continúa expandiendo tus conocimientos y habilidades en desarrollo web con entusiasmo y dedicación!