Mehrere Anfragen gleichzeitig senden

Mit Batchanfragen können Sie mit der Merchant API mehrere HTTP-Anfragen in einem einzigen API-Aufruf senden.

Wenn Sie Batchanfragen lieber mit Client Bibliotheken ausführen möchten, lesen Sie den Artikel 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. Der batchPath für die Merchant API ist batch/{sub-api}/v1. Den batchPath für andere APIs finden Sie in den Discovery Dokumenten.

Gründe für Batchanfragen:

  • Sie verwenden die API zum ersten Mal und haben viele Daten hochzuladen.
  • 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 Unteranfrage warten. Dadurch werden die Antwortzeiten des Servers 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 Bestands für ein Produkt und eine INSERT-Anfrage zum Aktualisieren des regionalen Bestands für dasselbe Produkt. Sie sollten das Format des Beispiels genau einhalten:

  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 am Anfang jeder verschachtelten Anfrage Content-Type: application/http ein.
  5. Verwenden Sie Content-ID, um jede verschachtelte Anfrage mit einer eigenen ID zu kennzeichnen. Beispiel: Content-ID: <get~en~US~123456>.
  6. Fügen Sie zwischen dem Header, dem Pfad und dem Text jeder verschachtelten Anfrage eine Leerzeile ein. Wenn die verschachtelte Anfrage keinen Text hat, lassen Sie vor der nächsten Begrenzung eine Leerzeile.
  7. Fügen Sie die Basis-URL nicht in jede einzelne verschachtelte Anfrage ein.
  8. Beenden Sie die Hauptanfrage mit einer letzten 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 Reihenfolge

  • 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 sehen Sie 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 die jeweilige 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--
'