Envía varias solicitudes a la vez

Puedes usar solicitudes por lotes con la API de Merchant para enviar varias solicitudes HTTP en una sola llamada a la API.

Si prefieres realizar el procesamiento por lotes con bibliotecas cliente, consulta Cómo refactorizar código para solicitudes simultáneas.

Una solicitud por lotes es una solicitud HTTP estándar que contiene varias llamadas a la API, con el tipo de contenido multipart/mixed. Dentro de la solicitud HTTP principal, cada parte contiene una solicitud HTTP anidada.

Puedes enviar la solicitud por lotes al batchPath especificado para la API. El batchPath de la versión beta de la API de Merchant Center es batch/{sub-api}/v1beta. Puedes encontrar el batchPath de otras APIs en sus documentos de descubrimiento. Estos son algunos ejemplos de motivos para enviar solicitudes por lotes:

  • Acabas de empezar a usar la API y tienes muchos datos para subir.
  • Un usuario realizó cambios en datos mientras tu aplicación estaba sin conexión, por lo que esta debe sincronizar los datos locales con el servidor.

El envío de varias solicitudes en paralelo evita que esperes a la subsolicitud más lenta, lo que mejora los tiempos de respuesta del servidor y reduce la latencia.

Cómo escribir una solicitud por lotes

A continuación, se muestra una solicitud por lotes de la API de Merchant Center de ejemplo. Esta solicitud combina una solicitud de obtención para recuperar el inventario regional de un producto y una solicitud de inserción para actualizar el inventario regional del mismo producto. Debes seguir exactamente el formato del ejemplo:

  1. Usa https://merchantapi.googleapis.com/batch/{sub-api}/v1beta como la URL base.
  2. Especifica un límite para separar cada solicitud anidada, por ejemplo: -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
  3. Separa cada solicitud anidada con el límite, por ejemplo, --batch_inventory.
  4. Incluye Content-Type: application/http al comienzo de cada solicitud anidada.
  5. Usa Content-ID para etiquetar cada solicitud anidada con tu propio ID. Por ejemplo: Content-ID: <get:online:en:US:123456>
  6. Incluye una línea en blanco entre el encabezado, la ruta de acceso y el cuerpo de cada solicitud anidada. Si la solicitud anidada no tiene un cuerpo, deja una línea en blanco antes del siguiente límite.
  7. No incluyas la URL de base en cada solicitud anidada individual.
  8. Finaliza la solicitud principal con un límite final, por ejemplo, --batch_inventory–.
curl https://merchantapi.googleapis.com/batch/inventories/v1beta \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
--data '
--batch_inventory
Content-Type: application/http
Content-ID: <get:online:en:US:123456>
GET /inventories/v1beta/accounts/123/products/online:en:US:123456/regionalInventories
--batch_inventory
Content-Type: application/http
Content-ID: <post:online:en:US:123456>
POST /inventories/v1beta/accounts/123/products/online:en:US:123456/regionalInventories:insert
{
   "region: "123456",
    "price": {
        "amountMicros": "100000000",
        "currencyCode": "USD"
    }
}
--batch_inventory--
'

Notas sobre los pedidos

  • Es posible que las solicitudes no se ejecuten en el orden en que las especificas.
  • Usa Content-ID para identificar solicitudes individuales.
  • Si necesitas ejecutar tus llamadas en un orden determinado, envíalas por separado y espera la respuesta a la primera solicitud antes de enviar la siguiente.

Cómo leer una respuesta por lotes

Este es un ejemplo de una respuesta HTTP por lotes. Es posible que el orden de las respuestas no coincida con el de las solicitudes. Usa Content-ID para identificar la solicitud anidada a la que pertenece cada respuesta anidada. En las respuestas, la API agrega un prefijo response- a cada Content-ID.

--batch_inventory
Content-Type: application/http
Content-ID: <response-get:online:en:US:123456>
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer
{}
--batch_inventory
Content-Type: application/http
Content-ID: <response-post:online:en:US:123456>
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer
{
  "name": "accounts/123/products/online:en:US:123456/regionalInventories/123456",
  "region": "123456",
  "price": {
    "amountMicros": "100000000",
    "currencyCode": "USD"
  }
}
--batch_inventory--
'