Mutaciones

Esta es la parte 3 de la serie para GraphQL y Adobe Commerce. Las mutaciones son la capacidad de guardar, actualizar y devolver valores mediante GraphQL.

Vídeos y tutoriales relacionados sobre GraphQL en esta serie

Mutación de ejemplo

Cualquier especificación de API completa debe ofrecer la capacidad no solo de consultar datos, sino también de crearlos y actualizarlos.

REST distingue entre solicitudes que cambian datos y aquellas que no lo hacen con el tipo de solicitud o "verbo" (GET vs. POST o PUT).
Al utilizar GraphQL, las consultas de modificación de datos se distinguen por la palabra clave mutation, que corresponde a otra
tipo de raíz en el esquema definido en el servidor.

Observe este ejemplo de mutación para agregar un producto al carro de compras de un usuario. (Esto requiere un ID de carro de compras que se haya generado)
para la sesión del cliente que inició sesión o que usa la mutación createEmptyCart).

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

Puede imaginar que la mutación anterior se envíe en una solicitud junto con el siguiente diccionario de variables:

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

Y, finalmente, podría recibir una respuesta como esta:

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

Lo principal que hay que tener en cuenta sobre el ejemplo anterior es que, aparte del uso de la palabra clave mutation en lugar de query,
la sintaxis es idéntica a una consulta. Al igual que las consultas, la mutación incluye:

  • Un nombre de operación arbitrario (doAddToCart)
  • Una lista de variables (por ejemplo, $cartId)
  • Un campo inicial (addProductsToCart) con argumentos (por ejemplo, cartId, establecido en el valor de $cartId) entre paréntesis
  • Una subselección de campos entre llaves

La subselección de campos permite definir de forma flexible los campos que desea devolver (desde el tipo asignado como
valor devuelto de addProductsToCart - AddProductsToCartOutput) después de completarse la mutación.

Como se explicó anteriormente, los campos definidos en un esquema de GraphQL comienzan en un tipo raíz para consultas (generalmente denominado Query). Del mismo modo,
existe otro tipo de raíz para las mutaciones (generalmente denominado Mutation). addProductsToCart es un campo
en ese tipo de raíz.

Algunas otras notas sobre el ejemplo anterior:

  • El sufijo de caracteres ! String y CartItemInput indica que la variable es necesaria.
  • Los corchetes ([]) alrededor del tipo CartItemInput especificado para $cartItems indican una lista
    de ese tipo en lugar de un solo valor.

Recursos útiles de GraphQL

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