Els tipus d'entrada (input types) en GraphQL són una manera de definir estructures de dades que es poden passar com a arguments a les consultes i mutacions. A diferència dels tipus de sortida (output types), que defineixen com es veuran les dades retornades, els tipus d'entrada defineixen com es veuran les dades que s'envien al servidor.
Conceptes Clau
- Definició de Tipus d'Entrada: Els tipus d'entrada es defineixen utilitzant la paraula clau
inputen l'esquema de GraphQL. - Ús en Mutacions: Els tipus d'entrada són especialment útils en mutacions, on sovint es necessita passar estructures de dades complexes com arguments.
- Validació: Els tipus d'entrada permeten validar les dades d'entrada abans de processar-les, assegurant que compleixin amb l'estructura esperada.
Definició de Tipus d'Entrada
Els tipus d'entrada es defineixen de manera similar als tipus d'objecte, però utilitzant la paraula clau input. Aquí teniu un exemple bàsic:
En aquest exemple, UserInput és un tipus d'entrada que conté tres camps: name, email i age. Els camps name i email són obligatoris (indicat pel signe d'exclamació !), mentre que age és opcional.
Ús en Mutacions
Els tipus d'entrada són especialment útils en mutacions, on sovint es necessita passar estructures de dades complexes com arguments. Aquí teniu un exemple de com utilitzar un tipus d'entrada en una mutació:
En aquest exemple, la mutació createUser accepta un argument input de tipus UserInput i retorna un objecte de tipus User.
Exemple Pràctic
Vegem un exemple complet que inclou la definició d'un tipus d'entrada, una mutació que utilitza aquest tipus d'entrada i un resolver per a la mutació.
Esquema
type User {
id: ID!
name: String!
email: String!
age: Int
}
input UserInput {
name: String!
email: String!
age: Int
}
type Mutation {
createUser(input: UserInput!): User
}
type Query {
users: [User]
}Resolver
const { v4: uuidv4 } = require('uuid');
let users = [];
const resolvers = {
Query: {
users: () => users,
},
Mutation: {
createUser: (_, { input }) => {
const newUser = { id: uuidv4(), ...input };
users.push(newUser);
return newUser;
},
},
};
module.exports = resolvers;Explicació del Codi
- Definició del Tipus d'Entrada: Hem definit un tipus d'entrada
UserInputamb els campsname,emailiage. - Mutació
createUser: La mutaciócreateUseraccepta un argumentinputde tipusUserInputi retorna un objecte de tipusUser. - Resolver
createUser: El resolver per a la mutaciócreateUsercrea un nou usuari amb un ID únic, afegeix l'usuari a la llistausersi retorna el nou usuari.
Exercici Pràctic
Exercici
Defineix un tipus d'entrada ProductInput amb els següents camps:
name: String!price: Float!inStock: Boolean
Crea una mutació addProduct que accepti un argument input de tipus ProductInput i retorni un objecte de tipus Product.
Solució
Esquema
type Product {
id: ID!
name: String!
price: Float!
inStock: Boolean
}
input ProductInput {
name: String!
price: Float!
inStock: Boolean
}
type Mutation {
addProduct(input: ProductInput!): Product
}
type Query {
products: [Product]
}Resolver
const { v4: uuidv4 } = require('uuid');
let products = [];
const resolvers = {
Query: {
products: () => products,
},
Mutation: {
addProduct: (_, { input }) => {
const newProduct = { id: uuidv4(), ...input };
products.push(newProduct);
return newProduct;
},
},
};
module.exports = resolvers;Conclusió
Els tipus d'entrada en GraphQL són una eina poderosa per definir estructures de dades que es poden passar com a arguments a les consultes i mutacions. Permeten validar les dades d'entrada i assegurar que compleixin amb l'estructura esperada, facilitant així la gestió de dades complexes en les aplicacions GraphQL.
Curs de GraphQL
Mòdul 1: Introducció a GraphQL
- Què és GraphQL?
- GraphQL vs REST
- Configuració d'un servidor GraphQL
- Conceptes bàsics de l'esquema de GraphQL
Mòdul 2: Conceptes bàsics
Mòdul 3: Disseny avançat d'esquemes
Mòdul 4: Treballant amb dades
- Connexió a una base de dades
- Estratègies de recuperació de dades
- Agrupació i emmagatzematge en memòria cau
- Gestió d'errors
Mòdul 5: Rendiment i seguretat
Mòdul 6: Eines i ecosistema
Mòdul 7: Proves i desplegament
- Proves unitàries de resolvers
- Proves d'integració
- Integració contínua
- Desplegament de servidors GraphQL
