Jednoczesne wysyłanie wielu próśb

Aby wysłać wiele żądań HTTP w jednym wywołaniu interfejsu API, możesz użyć żądań zbiorczych w interfejsie Merchant API.

Jeśli wolisz wykonywać grupowanie za pomocą bibliotek klienta, przeczytaj artykuł Refactoring kodu pod kątem równoczesnych żądań.

Żądanie zbiorcze to jedno standardowe żądanie HTTP zawierające wiele wywołań interfejsu API z użyciem typu treści multipart/mixed. W ramach głównego żądania HTTP każda część zawiera zagnieżdżone żądanie HTTP.

Możesz wysłać żądanie zbiorcze do określonego batchPath interfejsu API. batchPath w wersji beta interfejsu Merchant API to batch/{sub-api}/v1beta. batchPath innych interfejsów API znajdziesz w ich dokumentach informacyjnych. Oto przykłady powodów, dla których warto grupować prośby:

  • dopiero zaczęłaś/zacząłeś korzystać z interfejsu API i musisz przesłać dużo danych.
  • Użytkownik wprowadził zmiany w danych, gdy aplikacja była offline, i musi zsynchronizować dane lokalne z serwerem.

Tworzenie zbiorczego żądania

Oto przykład żądania zbiorczego interfejsu Merchant API. To żądanie łączy żądanie GET służące do pobierania regionalnego asortymentu produktu z żądaniem INSERT służącym do aktualizowania regionalnego asortymentu tego samego produktu. Format powinien być identyczny z przykładem:

  1. Jako adres URL bazowy użyj adresu https://merchantapi.googleapis.com/batch/{sub-api}/v1beta.
  2. Określ granicę, aby oddzielić od siebie poszczególne żądania zagnieżdżone, np.: -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
  3. Oddziel każde zagnieżdżone żądanie za pomocą granicy, np. --batch_inventory.
  4. Umieszczaj Content-Type: application/http na początku każdego zagnieżdżonego żądania.
  5. Użyj atrybutu Content-ID, aby oznaczyć każde zagnieżdżone żądanie własnym identyfikatorem. Na przykład: Content-ID: <get:online:en:US:123456>.
  6. Dodaj pustą linię między nagłówkiem, ścieżką i tekstem żądania zagnieżdżonego. Jeśli zagnieżbione żądanie nie zawiera treści, przed następną granicą pozostaw pustą linię.
  7. Nie dołączaj podstawowego adresu URL w każdej osobnej zagnieżdżonej prośbie.
  8. Zakończ główne żądanie za pomocą ostatniej granicy, na przykład --batch_inventory–.
curl https://merchantapi.googleapis.com/batch/inventories/v1beta \
-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/v1beta/accounts/123/products/online:en:US:123456/regionalInventories
--batch_inventory
Content-Type: application/http
Content-ID: <post:online:en:US:123456>
POST /inventories/v1beta/accounts/123/products/online:en:US:123456/regionalInventories:insert
{
   "region: "123456",
    "price": {
        "amountMicros": "100000000",
        "currencyCode": "USD"
    }
}
--batch_inventory--
'

Uwagi dotyczące zamawiania

  • Żądania mogą nie zostać wykonane w kolejności, w jakiej je podano.
  • Użyj Content-ID, aby zidentyfikować poszczególne żądania.
  • Jeśli musisz wykonać wywołania w określonej kolejności, wyślij je osobno i zaczekaj na odpowiedź na pierwsze żądanie, zanim wyślesz kolejne.

Czytanie odpowiedzi zbiorczej

Oto przykład odpowiedzi zbiorczej HTTP. Kolejność odpowiedzi może być inna niż kolejność żądań. Użyj atrybutu Content-ID, aby określić, do której zagnieżdżonej prośby należy każda odpowiedź zagnieżdżona. W odpowiedziach interfejs API dodaje prefiks response- do każdego elementu Content-ID.

--batch_inventory
Content-Type: application/http
Content-ID: <response-get:online: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:online: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/online:en:US:123456/regionalInventories/123456",
  "region": "123456",
  "price": {
    "amountMicros": "100000000",
    "currencyCode": "USD"
  }
}
--batch_inventory--
'