Mehrere Anfragen gleichzeitig senden

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:

  1. Verwenden Sie https://merchantapi.googleapis.com/batch/{sub-api}/v1 als Basis-URL.
  2. Geben Sie eine Begrenzung an, um die einzelnen verschachtelten Anfragen zu trennen, z. B. -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \.
  3. Trennen Sie die einzelnen verschachtelten Anfragen durch die Begrenzung, z. B. --batch_inventory.
  4. Fügen Sie Content-Type: application/http am Anfang jeder verschachtelten Anfrage ein.
  5. Verwenden Sie Content-ID, um jede verschachtelte Anfrage mit Ihrer eigenen ID zu kennzeichnen. Beispiel: Content-ID: <get~en~US~123456>.
  6. 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.
  7. Die Basis-URL darf nicht in jeder einzelnen verschachtelten Anfrage enthalten sein.
  8. 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--
'