Sie können Batchanfragen mit der Merchant API verwenden, um mehrere HTTP-Anfragen in einem einzigen API-Aufruf zu senden.
Wenn Sie Batching lieber mit Clientbibliotheken durchführen möchten, lesen Sie den Abschnitt Code für gleichzeitige Anfragen umgestalten.
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–
.
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--
'
Hinweise zur Bestellung
- 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.
--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--
'