Cliente headless: PetStore Vion · Storefront API 2025-01 · 3 operaciones generadas y validadas
# Busca un producto por su handle y retorna variantes con precio y stock query ProductByHandle($handle: String!, $country: CountryCode!) @inContext(country: $country) { product(handle: $handle) { id title descriptionHtml featuredImage { url altText } variants(first: 10) { nodes { id title availableForSale quantityAvailable price { amount currencyCode } compareAtPrice { amount currencyCode } selectedOptions { name value } } } } }
ProductVariant.quantityAvailable devuelve null si el inventario no está rastreado — tratar como disponible.# Crea el carrito con los primeros artículos (evita cartCreate + cartLinesAdd por separado) mutation CartCreate($lines: [CartLineInput!]!, $buyerIdentity: CartBuyerIdentityInput) { cartCreate( input: { lines: $lines buyerIdentity: $buyerIdentity } ) { cart { id checkoutUrl totalQuantity cost { subtotalAmount { amount currencyCode } totalTaxAmount { amount currencyCode } } lines(first: 50) { nodes { id quantity merchandise { ... on ProductVariant { id title price { amount currencyCode } } } } } } userErrors { field message code } } }
lines en el input en lugar de cartCreate + cartLinesAdd separados (reduce 1 round-trip).httpOnly o sessionStorage para reconectar el carrito entre páginas.# Actualiza la cantidad de una o varias líneas (quantity: 0 elimina la línea) mutation CartLinesUpdate($cartId: ID!, $lines: [CartLineUpdateInput!]!) { cartLinesUpdate(cartId: $cartId, lines: $lines) { cart { id totalQuantity cost { subtotalAmount { amount currencyCode } } lines(first: 50) { nodes { id quantity cost { totalAmount { amount } } } } } userErrors { field message } } }
cartLinesRemove para ese caso.$lines.totalAmount por línea (no todos los campos de precio) minimiza el payload de respuesta.{ // ProductByHandle "handle": "pienso-premium-senior-labrador", "country": "ES", // CartCreate "lines": [ { "merchandiseId": "gid://shopify/ProductVariant/44892012781786", "quantity": 2 } ], "buyerIdentity": { "countryCode": "ES" }, // CartLinesUpdate "cartId": "gid://shopify/Cart/c1-abc123def456", "lines": [{ "id": "gid://shopify/CartLine/abc123", "quantity": 3 }] }
Todas las operaciones han pasado la validación contra el schema de Storefront API 2025-01. Cero errores de tipo, campos obsoletos ni argumentos incorrectos.