Mutationer
Detta är en del 3 av serien för GraphQL och Adobe Commerce. Mutationer är möjligheten att spara, uppdatera och returnera värden med GraphQL.
Relaterade videor och självstudiekurser om GraphQL i den här serien
Exempelmutation
Alla fullständiga API-specifikationer måste kunna erbjuda både möjlighet att fråga efter data och att skapa och uppdatera dem.
REST skiljer mellan begäranden som ändrar data och sådana som inte har begärandetypen eller verb (GET kontra POST eller PUT).
När du använder GraphQL särskiljs datamodifierande frågor med nyckelordet mutation
som motsvarar ett annat
rottyp i schemat som definierats på servern.
Titta på den här exempelmutationen för att lägga en produkt i en användares kundvagn. (Detta kräver ett vagn-ID som genereras
för den inloggade kundens session eller med mutationen createEmptyCart
.)
mutation doAddToCart(
$cartId: String!,
$cartItems: [CartItemInput!]!
) {
addProductsToCart(
cartId: $cartId
cartItems: $cartItems
) {
cart {
total_quantity
prices {
grand_total {
value
}
}
}
}
}
Du kan tänka dig att mutationen ovan skickas i en begäran tillsammans med följande variabelordlista:
{
"cartId": "{cart-id}",
"cartItems": [
{
"quantity": 1,
"sku": "VT01-RN-XS"
}
]
}
Slutligen kanske du får ett svar som det här:
{
"data": {
"addProductsToCart": {
"cart": {
"total_quantity": 1,
"prices": {
"grand_total": {
"value": 35.2
}
}
}
}
}
}
Det viktigaste att notera är att om exemplet ovan används inte nyckelordet mutation
utan query
syntaxen är identisk med en fråga. På samma sätt som i frågor innehåller mutationen:
- Ett godtyckligt åtgärdsnamn (
doAddToCart
) - En lista med variabler (till exempel
$cartId
) - Ett inledande fält (
addProductsToCart
) med argument (till exempelcartId
, inställt på värdet$cartId
) inom parentes - En delmarkering av fält inom klammerparenteser
Med fältdelmarkeringen kan du på ett flexibelt sätt definiera de fält som du vill returnera (från den typ som tilldelats som
returvärdet addProductsToCart
- AddProductsToCartOutput
) när mutationen är slutförd.
Som förklarats ovan startar fält som definieras i ett GraphQL-schema på en rottyp för frågor (kallas vanligtvis Query
). På samma sätt
en annan rottyp finns för mutationer (kallas vanligtvis Mutation
). addProductsToCart
är ett fält
på den rottypen.
Några andra kommentarer om exemplet ovan:
- Tecknet
!
med suffixetString
ochCartItemInput
anger att variabeln är obligatorisk. - Hakparenteserna (
[]
) runtCartItemInput
-typen som anges för$cartItems
anger en lista
av den typen i stället för ett enda värde.