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
yCartItemInput
indica que la variable es necesaria. - Los corchetes (
[]
) alrededor del tipoCartItemInput
especificado para$cartItems
indican una lista
de ese tipo en lugar de un solo valor.