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
input
en 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
UserInput
amb els campsname
,email
iage
. - Mutació
createUser
: La mutaciócreateUser
accepta un argumentinput
de tipusUserInput
i retorna un objecte de tipusUser
. - Resolver
createUser
: El resolver per a la mutaciócreateUser
crea un nou usuari amb un ID únic, afegeix l'usuari a la llistausers
i 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