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 valor de batchPath para la API de Merchant es batch/{sub-api}/v1. Puedes encontrar el batchPath de otras APIs en sus documentos de descubrimiento.
Estos son algunos ejemplos de motivos para agrupar tus solicitudes:
Recién empiezas a utilizar la API y tienes muchos datos para cargar.
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 debas esperar 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 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 el formato del ejemplo exactamente:
Usa https://merchantapi.googleapis.com/batch/{sub-api}/v1 como 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/http al comienzo de cada solicitud anidada.
Usa Content-ID para 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 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.
No incluyas la URL base en cada solicitud anidada individual.
Finaliza la solicitud principal con un límite final, por ejemplo, --batch_inventory–.
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.
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-08-26 (UTC)"],[[["\u003cp\u003eThe Shopping Content API allows batch requests with multiple entries of different methods (insert, update, delete, custom) within a single request, while the Merchant API requires separate, parallel requests for similar functionality.\u003c/p\u003e\n"],["\u003cp\u003eWhen using client libraries, the Shopping Content API offers a \u003ccode\u003ecustombatch\u003c/code\u003e method, whereas the Merchant API utilizes individual API calls that can be executed concurrently using \u003ccode\u003eApiFuture\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eFor scenarios without client libraries, batching in the Shopping Content API involves a single POST request to a specific batch endpoint with an "entries" array, while the Merchant API uses multipart/mixed requests to combine multiple operations.\u003c/p\u003e\n"]]],[],null,["You can use [batch requests](//cloud.google.com/compute/docs/api/how-tos/batch)\nwith the Merchant API to send multiple HTTP requests in a single API call.\n\nIf you prefer to perform batching with [client\nlibraries](/merchant/api/client-libraries), see [Refactor code for concurrent\nrequests](/merchant/api/guides/compatibility/refactor-concurrent-requests).\n\nA batch request is a single standard HTTP request containing multiple API calls,\nusing the `multipart/mixed` content type. Within the main HTTP request, each\npart contains a nested HTTP request.\n\nYou can send the batch request to the specified `batchPath` for the API. The\n`batchPath` for Merchant API is `batch/{sub-api}/v1`. You can find the\n`batchPath` for other APIs in their [discovery\ndocuments](/discovery/v1/reference/apis).\n\nExamples of reasons to batch your requests include:\n\n- You just started using the API and have a lot of data to upload.\n- A user made changes to data while your application was offline, and your application needs to synchronize local data with the server.\n\nSending multiple requests in parallel prevents you from waiting for the slowest\nsub-request, which improves server response times and reduces latency.\n| **Tip:** For optimal performance of high-throughput tasks like product or inventory updates, we recommend starting with a moderate batch size and then scaling based on your API quota. For the API-specific quotas, see [Quota and\n| limits](/merchant/api/guides/quotas-limits)\n| **Note:** Batching requests doesn't reduce your usage count. If a batch has N individual requests, it counts as N requests against your quota.\n\nWrite a batch request\n\nHere's a sample Merchant API batch request. This request combines a get request\nto retrieve the regional inventory for a product, and an insert request to\nupdate the regional inventory for the same product. You should follow the format\nof the example exactly:\n\n1. Use `https://merchantapi.googleapis.com/batch/{sub-api}/v1` as the base URL.\n2. Specify a boundary to separate each nested request, for example: `-H\n 'Content-Type: multipart/mixed,boundary=batch_inventory' \\`\n3. Separate each nested request with the boundary, for example `--batch_inventory`.\n4. Include `Content-Type: application/http` at the beginning of each nested request.\n5. Use `Content-ID` to label each nested request with your own ID. For example: `Content-ID: \u003cget~en~US~123456\u003e`.\n6. Include a blank line between the header, path and body of each nested request. If the nested request doesn't have a body, leave a blank line before the next boundary.\n7. Don't include the base URL in each individual nested request.\n8. End the main request with a final boundary, for example `--batch_inventory--`.\n\n curl https://merchantapi.googleapis.com/batch/inventories/v1 \\\n -H 'Authorization: Bearer \u003cTOKEN\u003e' \\\n -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \\\n --data '\n --batch_inventory\n Content-Type: application/http\n Content-ID: \u003cget:online:en:US:123456\u003e\n GET /inventories/v1/accounts/123/products/online:en:US:123456/regionalInventories\n --batch_inventory\n Content-Type: application/http\n Content-ID: \u003cpost:online:en:US:123456\u003e\n POST /inventories/v1/accounts/123/products/online:en:US:123456/regionalInventories:insert\n {\n \"region: \"123456\",\n \"price\": {\n \"amountMicros\": \"100000000\",\n \"currencyCode\": \"USD\"\n }\n }\n --batch_inventory--\n '\n\nNotes on ordering\n\n- Requests might not execute in the order you specify them.\n- Use `Content-ID` to identify individual requests.\n- If you need to execute your calls in a given order, send them separately and wait for the response to the first request before sending the next one.\n\nRead a batch response\n\nHere's an example of an HTTP batch response. The order of the responses might\nnot match the order of the requests. Use `Content-ID` to identify the nested\nrequest each nested response belongs to. In the responses, the API adds a\n`response-` prefix to each `Content-ID`. \n\n --batch_inventory\n Content-Type: application/http\n Content-ID: \u003cresponse-get~en~US~123456\u003e\n HTTP/1.1 200 OK\n Content-Type: application/json; charset=UTF-8\n Vary: Origin\n Vary: X-Origin\n Vary: Referer\n {}\n --batch_inventory\n Content-Type: application/http\n Content-ID: \u003cresponse-post~en~US~123456\u003e\n HTTP/1.1 200 OK\n Content-Type: application/json; charset=UTF-8\n Vary: Origin\n Vary: X-Origin\n Vary: Referer\n {\n \"name\": \"accounts/123/products/en~US~123456/regionalInventories/123456\",\n \"region\": \"123456\",\n \"price\": {\n \"amountMicros\": \"100000000\",\n \"currencyCode\": \"USD\"\n }\n }\n --batch_inventory--\n '"]]