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 suffixingStringandCartItemInputindicates that the variable is required. - The square brackets (
[]) around theCartItemInputtype specified for$cartItemsindicate a list
of that type rather than a single value.