Jednoczesne wysyłanie wielu próśb

Możesz używać żądań zbiorczych z interfejsem Merchant API, aby wysyłać wiele żądań HTTP w jednym wywołaniu interfejsu API.

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

Żądanie zbiorcze to pojedyncze standardowe żądanie HTTP zawierające wiele wywołań interfejsu API, które używa 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 batchPath interfejsu API. batchPath dla interfejsu Merchant API to batch/{sub-api}/v1. Wartość batchPath dla innych interfejsów API znajdziesz w ich dokumentach opisujących.

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 aplikacja była offline, i aplikacja musi zsynchronizować dane produktów dostępnych lokalnie z serwerem.

Wysyłanie wielu żądań równolegle zapobiega oczekiwaniu na najwolniejsze żądanie podrzędne, co skraca czas odpowiedzi serwera i czas oczekiwania.

Tworzenie żądania zbiorczego

Oto przykładowe żądanie zbiorcze do interfejsu Merchant API. To żądanie łączy żądanie GET, które pobiera asortyment regionalny produktu, i żądanie wstawienia, które aktualizuje asortyment regionalny tego samego produktu. Użyj dokładnie takiego formatu jak w przykładzie:

  1. Użyj https://merchantapi.googleapis.com/batch/{sub-api}/v1 jako podstawowego adresu URL.
  2. Określ granicę, aby oddzielić każde zagnieżdżone żądanie, na przykład: -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
  3. Oddziel każde zagnieżdżone żądanie granicą, na przykład --batch_inventory.
  4. Na początku każdego zagnieżdżonego żądania dodaj 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. Wstaw pusty wiersz między nagłówkiem, ścieżką i treścią każdego zagnieżdżonego żądania. Jeśli zagnieżdżone żądanie nie ma treści, przed następną granicą pozostaw pusty wiersz.
  7. Nie dołączaj podstawowego adresu URL do każdego zagnieżdżonego żądania.
  8. Zakończ główne żądanie ostateczną granicą, na przykład --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 dotyczące zamawiania

  • Żądania mogą nie być wykonywane w określonej przez Ciebie kolejności.
  • Użyj Content-ID, aby zidentyfikować poszczególne żądania.
  • Jeśli chcesz, aby wywołania były wykonywane w określonej kolejności, wysyłaj je osobno i poczekaj na odpowiedź na pierwsze żądanie, zanim wyślesz kolejne.

Odczytywanie odpowiedzi zbiorczej

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

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

Limity

Żądania zbiorcze mają te limity:

  • 2000 żądań zagnieżdżonych na żądanie zbiorcze.

Jeśli żądanie zbiorcze przekroczy którykolwiek z tych limitów, interfejs API zwróci błąd 400 Bad Request i odrzuci całe żądanie.