Jednoczesne wysyłanie wielu próśb

Za pomocą żądań zbiorczych w interfejsie API sprzedawcy możesz wysyłać wiele żądań HTTP w ramach jednego wywołania interfejsu API.

Jeśli wolisz wykonywać grupowanie za pomocą bibliotek klienta, zapoznaj się z artykułem Refaktoryzacja kodu pod kątem żądań współbieżnych.

Żądanie zbiorcze to pojedyncze standardowe żądanie HTTP zawierające wiele wywołań interfejsu API, które korzysta z typu treści multipart/mixed. W głównym żądaniu HTTP każda część zawiera zagnieżdżone żądanie HTTP.

Żądanie zbiorcze możesz wysłać do określonego parametru batchPath interfejsu API. Parametr batchPath interfejsu API sprzedawcy to batch/{sub-api}/v1. Parametr batchPath innych interfejsów API znajdziesz w ich dokumentach wykrywania.

Oto przykłady powodów, dla których warto grupować żądania:

  • Dopiero zaczynasz korzystać z interfejsu API i masz dużo danych do przesłania.
  • Użytkownik wprowadził zmiany w danych, gdy Twoja aplikacja była offline, a aplikacja musi zsynchronizować dane produktów dostępnych lokalnie z serwerem.

Wysyłanie wielu żądań równolegle zapobiega czekaniu na najwolniejsze żądanie podrzędne, co skraca czas odpowiedzi serwera i zmniejsza opóźnienie.

Pisanie żądania zbiorczego

Oto przykładowe żądanie zbiorcze do interfejsu API sprzedawcy. To żądanie łączy żądanie get, aby pobrać regionalny asortyment produktu, oraz żądanie insert, aby zaktualizować regionalny asortyment tego samego produktu. Powinieneś(-aś) dokładnie przestrzegać formatu podanego w przykładzie:

  1. Jako podstawowy adres URL użyj https://merchantapi.googleapis.com/batch/{sub-api}/v1.
  2. Określ granicę, aby oddzielić każde zagnieżdżone żądanie, np. -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \.
  3. Oddziel każde zagnieżdżone żądanie granicą, np. --batch_inventory.
  4. Na początku każdego zagnieżdżonego żądania umieść Content-Type: application/http.
  5. Użyj Content-ID, aby oznaczyć każde zagnieżdżone żądanie własnym identyfikatorem. Na przykład: Content-ID: <get~en~US~123456>.
  6. Między nagłówkiem, ścieżką i treścią każdego zagnieżdżonego żądania umieść pusty wiersz. Jeśli zagnieżdżone żądanie nie ma treści, przed następną granicą pozostaw pusty wiersz.
  7. Nie umieszczaj podstawowego adresu URL w każdym pojedynczym zagnieżdżonym żądaniu.
  8. Zakończ główne żądanie końcową granicą, np. --batch_inventory–.
curl https://merchantapi.googleapis.com/batch/inventories/v1 \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
--data '
--batch_inventory
Content-Type: application/http
Content-ID: <get~en~US~123456>

GET /inventories/v1/accounts/123/products/en~US~123456/regionalInventories

--batch_inventory
Content-Type: application/http
Content-ID: <post~en~US~123456>

POST /inventories/v1/accounts/123/products/en~US~123456/regionalInventories:insert
{
  "region": "123456",
  "price": {
    "amountMicros": "100000000",
    "currencyCode": "USD"
  }
}

--batch_inventory--'

Uwagi na temat kolejności

  • Żądania mogą nie być wykonywane w kolejności, w jakiej je określisz.
  • Do identyfikowania poszczególnych żądań używaj Content-ID.
  • Jeśli musisz wykonywać wywołania w określonej kolejności, wysyłaj je osobno i przed wysłaniem następnego żądania poczekaj na odpowiedź na pierwsze żądanie.

Odczytywanie odpowiedzi zbiorczej

Oto przykład odpowiedzi zbiorczej HTTP. Kolejność odpowiedzi może nie odpowiadać kolejności żądań. Użyj Content-ID, aby zidentyfikować zagnieżdżone żądanie, do którego należy każda zagnieżdżona odpowiedź. W odpowiedziach interfejs API dodaje do każdego Content-ID prefiks response-.

--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--
'