Puedes usar solicitudes por lotes con la API de Merchant Center para enviar varias solicitudes HTTP en una sola llamada a la API.
Si prefieres realizar el procesamiento por lotes con bibliotecas cliente, consulta Refactoriza el código para solicitudes simultáneas.
Una solicitud por lotes es una solicitud HTTP estándar que contiene múltiples 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 API de Merchant Center es batch/{sub-api}/v1. Puedes encontrar el
batchPath para otras APIs en sus documentos
de descubrimiento.
Estos son algunos motivos para procesar tus solicitudes por lotes:
- Acabas de comenzar 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 debe sincronizar los datos locales con el servidor.
Enviar varias solicitudes en paralelo evita que esperes la subsolicitud más lenta, lo que mejora los tiempos de respuesta del servidor y reduce la latencia.
Escribe una solicitud por lotes
La siguiente es una solicitud por lotes de ejemplo de la API de Merchant Center. Esta solicitud combina una solicitud get para recuperar el inventario regional de un producto y una solicitud insert para actualizar el inventario regional del mismo producto. Debes seguir el formato del ejemplo exactamente:
- Usa
https://merchantapi.googleapis.com/batch/{sub-api}/v1como la URL base. - Especifica un límite para separar cada solicitud anidada, por ejemplo:
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \ - Separa cada solicitud anidada con el límite, por ejemplo,
--batch_inventory. - Incluye
Content-Type: application/httpal comienzo de cada solicitud anidada. - Usa
Content-IDpara etiquetar cada solicitud anidada con tu propio ID. Por ejemplo:Content-ID: <get~en~US~123456>. - 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.
- No incluyas la URL base en cada solicitud anidada individual.
- Finaliza la solicitud principal con un límite final, por ejemplo,
--batch_inventory–.
curl https://merchantapi.googleapis.com/batch/inventories/v1 \
-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/v1/accounts/123/products/online:en:US:123456/regionalInventories
--batch_inventory
Content-Type: application/http
Content-ID: <post:online:en:US:123456>
POST /inventories/v1/accounts/123/products/online:en:US:123456/regionalInventories:insert
{
"region: "123456",
"price": {
"amountMicros": "100000000",
"currencyCode": "USD"
}
}
--batch_inventory--
'
Notas sobre el orden
- Es posible que las solicitudes no se ejecuten en el orden en que las especificas.
- Usa
Content-IDpara 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.
Lee una respuesta por lotes
Este es un ejemplo de una respuesta por lotes de 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, la API agrega un prefijo response- a cada Content-ID.
--batch_inventory
Content-Type: application/http
Content-ID: <response-get~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~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/en~US~123456/regionalInventories/123456",
"region": "123456",
"price": {
"amountMicros": "100000000",
"currencyCode": "USD"
}
}
--batch_inventory--
'