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 exempel cartId, 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 suffixet String och CartItemInput anger att variabeln är obligatorisk.
  • Hakparenteserna ([]) runt CartItemInput-typen som anges för $cartItems anger en lista
    av den typen i stället för ett enda värde.

Användbara GraphQL-resurser

recommendation-more-help
3a5f7e19-f383-4af8-8983-d01154c1402f