Mutações

Esta é a parte 3 da série para GraphQL e Adobe Commerce. Mutações são a capacidade de salvar, atualizar e retornar valores usando o GraphQL.

Vídeos e tutoriais relacionados ao GraphQL nesta série

Exemplo de mutação

Qualquer especificação completa da API precisa oferecer a capacidade não apenas de consultar dados, mas também de criá-los e atualizá-los.

REST distingue entre solicitações que alteram dados e aquelas que não têm o tipo de solicitação ou “verbo” (GET vs. POST ou PUT).
Ao usar o GraphQL, as consultas de modificação de dados são diferenciadas pela palavra-chave mutation que corresponde a uma
tipo raiz no esquema definido no servidor.

Observe este exemplo de mutação para adicionar um produto ao carrinho de um usuário. (Isso requer uma ID de carrinho gerada
para a sessão do cliente conectado ou usando a mutação createEmptyCart.)

mutation doAddToCart(
    $cartId: String!,
    $cartItems: [CartItemInput!]!
) {
    addProductsToCart(
        cartId: $cartId
        cartItems: $cartItems
    ) {
        cart {
            total_quantity
            prices {
                grand_total {
                    value
                }
            }
        }
    }
}

Você pode imaginar a mutação acima sendo enviada em uma solicitação junto com o seguinte dicionário de variáveis:

{
  "cartId": "{cart-id}",
  "cartItems": [
    {
      "quantity": 1,
      "sku": "VT01-RN-XS"
    }
  ]
}

E, finalmente, você pode receber uma resposta como esta:

{
  "data": {
    "addProductsToCart": {
      "cart": {
        "total_quantity": 1,
        "prices": {
          "grand_total": {
            "value": 35.2
          }
        }
      }
    }
  }
}

O principal a ser observado sobre o exemplo acima é que, além do uso da palavra-chave mutation em vez de query,
the syntax is identical to a query. Like queries, the mutation includes:

  • An arbitrary operation name (doAddToCart)
  • A list of variables (for example, $cartId)
  • An initial field (addProductsToCart) with arguments (for example, cartId, set to the value of $cartId) in parentheses
  • A subselection of fields in braces

The fields subselection allows you to flexibly define the fields you would like returned (from the type assigned as the
return value of addProductsToCart - AddProductsToCartOutput) after the mutation is completed.

As explained previously, fields defined in a GraphQL schema start on a root type for queries (typically referred to as a Query). Similarly,
another root type exists for mutations (typically referred to as Mutation). addProductsToCart is a field
on that root type.

A few other notes about the above example:

  • The ! character suffixing String and CartItemInput indicates that the variable is required.
  • The square brackets ([]) around the CartItemInput type specified for $cartItems indicate a list
    of that type rather than a single value.

Recursos úteis do GraphQL

recommendation-more-help
commerce-learn-help-home