Mutazioni
Questa è la parte 3 della serie per GraphQL e Adobe Commerce. Le mutazioni consentono di salvare, aggiornare e restituire valori tramite GraphQL.
Video e tutorial correlati su GraphQL in questa serie
Esempio di mutazione
Qualsiasi specifica API completa deve offrire la possibilità non solo di eseguire query sui dati, ma anche di crearli e aggiornarli.
REST distingue tra le richieste che modificano i dati e quelle che non hanno il tipo di richiesta o "verbo" (GET vs. POST o PUT).
Quando si utilizza GraphQL, le query che modificano i dati si distinguono per la parola chiave mutation
che corrisponde a un
tipo di radice nello schema definito nel server.
Osserva questa mutazione di esempio per aggiungere un prodotto al carrello di un utente. (Richiede un ID carrello generato)
per la sessione del cliente connesso o utilizzando la mutazione createEmptyCart
.)
mutation doAddToCart(
$cartId: String!,
$cartItems: [CartItemInput!]!
) {
addProductsToCart(
cartId: $cartId
cartItems: $cartItems
) {
cart {
total_quantity
prices {
grand_total {
value
}
}
}
}
}
Puoi immaginare che la mutazione di cui sopra venga inviata in una richiesta insieme alle seguenti variabili del dizionario:
{
"cartId": "{cart-id}",
"cartItems": [
{
"quantity": 1,
"sku": "VT01-RN-XS"
}
]
}
E infine, potresti ricevere una risposta come questa:
{
"data": {
"addProductsToCart": {
"cart": {
"total_quantity": 1,
"prices": {
"grand_total": {
"value": 35.2
}
}
}
}
}
}
La cosa principale da notare riguardo all'esempio precedente è che, a parte l'uso della parola chiave mutation
invece di query
,
la sintassi è identica a una query. Come le query, la mutazione include:
- Nome di operazione arbitrario (
doAddToCart
) - Un elenco di variabili (ad esempio,
$cartId
) - Un campo iniziale (
addProductsToCart
) con argomenti (ad esempio,cartId
, impostato sul valore di$cartId
) tra parentesi - Sottoselezione di campi tra parentesi graffe
La sottoselezione dei campi consente di definire in modo flessibile i campi che si desidera restituire (dal tipo assegnato come
valore restituito addProductsToCart
- AddProductsToCartOutput
) dopo il completamento della mutazione.
Come spiegato in precedenza, i campi definiti in uno schema GraphQL iniziano con un tipo principale per le query (in genere denominato Query
). Analogamente,
esiste un altro tipo di radice per le mutazioni (in genere definito Mutation
). addProductsToCart
è un campo
su quel tipo di radice.
Altre note sull’esempio precedente:
- Il suffisso del carattere
!
String
eCartItemInput
indica che la variabile è obbligatoria. - Le parentesi quadre (
[]
) intorno al tipoCartItemInput
specificato per$cartItems
indicano un elenco
di quel tipo piuttosto che un singolo valore.