Envía varias solicitudes a la vez

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

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 para la versión beta de la API de Merchant es batch/{sub-api}/v1beta . Puedes encontrar el archivo batchPath para otras APIs en sus documentos de descubrimiento.

Estos son algunos ejemplos de ocasiones en las que es posible que quieras agrupar tus solicitudes:

  • Recién comienzas a usar la API y tienes muchos datos para subir.
  • Un usuario realizó cambios en los datos mientras tu aplicación estaba sin conexión, y esta necesita sincronizar datos locales con el servidor.

Si tienes preguntas sobre el procesamiento por lotes HTTP o si deseas solicitar la capacidad de enviar solicitudes por lotes con nuestras bibliotecas cliente, envía comentarios.

Escribe una solicitud por lotes

Este es un ejemplo de una solicitud por lotes a la API de Merchant. Esta combinación combina una solicitud get para recuperar el inventario regional de un producto y una solicitud de inserción a fin de actualizar el inventario local 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. (Opcional) 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 cuerpo, deja una línea en blanco antes del siguiente límite.

  7. No incluyas la URL 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--
'

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 por lotes HTTP. 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, cada Content-ID tiene el prefijo response-.

--batch_YCE-jYH0pmDrBIHeHhltcpXIMpk0VTzQ
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_YCE-jYH0pmDrBIHeHhltcpXIMpk0VTzQ
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_YCE-jYH0pmDrBIHeHhltcpXIMpk0VTzQ--
'