Eine Batchanfrage ist eine einzelne Standard-HTTP-Anfrage, die mehrere API-Aufrufe enthält. Dabei wird der Inhaltstyp multipart/mixed verwendet. Jeder Teil der HTTP-Hauptanfrage enthält eine verschachtelte HTTP-Anfrage.
Sie können die Batchanfrage an den angegebenen batchPath für die API senden. Die batchPath für die Merchant API ist batch/{sub-api}/v1. Die batchPath für andere APIs finden Sie in den jeweiligen Discovery-Dokumenten.
Gründe für das Batching von Anfragen:
Sie haben gerade mit der Verwendung der API begonnen und müssen viele Daten hochladen.
Ein Nutzer hat Änderungen an Daten vorgenommen, während Ihre Anwendung offline war, und Ihre Anwendung muss die lokalen Daten mit dem Server synchronisieren.
Wenn Sie mehrere Anfragen parallel senden, müssen Sie nicht auf die langsamste untergeordnete Anfrage warten. Dadurch werden die Serverreaktionszeiten verbessert und die Latenz verringert.
Batchanfrage schreiben
Hier sehen Sie ein Beispiel für eine Batchanfrage für die Merchant API. Diese Anfrage kombiniert eine GET-Anfrage zum Abrufen des regionalen Inventars für ein Produkt und eine INSERT-Anfrage zum Aktualisieren des regionalen Inventars für dasselbe Produkt. Sie sollten sich genau an das Format des Beispiels halten:
Verwenden Sie https://merchantapi.googleapis.com/batch/{sub-api}/v1 als Basis-URL.
Geben Sie eine Begrenzung an, um die einzelnen verschachtelten Anfragen zu trennen, z. B. -H
'Content-Type: multipart/mixed,boundary=batch_inventory' \.
Trennen Sie die einzelnen verschachtelten Anfragen durch die Begrenzung, z. B. --batch_inventory.
Fügen Sie Content-Type: application/http am Anfang jeder verschachtelten Anfrage ein.
Verwenden Sie Content-ID, um jede verschachtelte Anfrage mit Ihrer eigenen ID zu kennzeichnen. Beispiel: Content-ID: <get~en~US~123456>.
Fügen Sie zwischen dem Header, dem Pfad und dem Textkörper jeder verschachtelten Anfrage eine leere Zeile ein. Wenn die verschachtelte Anfrage keinen Textkörper hat, lassen Sie vor der nächsten Begrenzung eine leere Zeile.
Die Basis-URL darf nicht in jeder einzelnen verschachtelten Anfrage enthalten sein.
Beenden Sie die Hauptanfrage mit einer finalen Begrenzung, z. B. --batch_inventory–.
Anfragen werden möglicherweise nicht in der von Ihnen angegebenen Reihenfolge ausgeführt.
Verwenden Sie Content-ID, um einzelne Anfragen zu identifizieren.
Wenn Sie Ihre Aufrufe in einer bestimmten Reihenfolge ausführen müssen, senden Sie sie separat und warten Sie auf die Antwort auf die erste Anfrage, bevor Sie die nächste senden.
Batchantwort lesen
Hier ist ein Beispiel für eine HTTP-Batchantwort. Die Reihenfolge der Antworten entspricht möglicherweise nicht der Reihenfolge der Anfragen. Verwenden Sie Content-ID, um die verschachtelte Anfrage zu identifizieren, zu der jede verschachtelte Antwort gehört. In den Antworten fügt die API jeder Content-ID das Präfix response- hinzu.
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 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 '"]]