Jednoczesne wysyłanie wielu próśb

Za pomocą żądania zbiorczego w interfejsie Merchant API możesz wysyłać wiele żądań HTTP w jednym wywołaniu interfejsu API.

Jeśli wolisz tworzyć żądania wsadowe za pomocą bibliotek klienta, przeczytaj artykuł Zmiana struktury kodu na potrzeby jednoczesnych żądań.

Żą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 batchPath interfejsu API. W przypadku interfejsu API sprzedawcy jest to batch/{sub-api}/v1.batchPath batchPath dla innych interfejsów API znajdziesz w dokumentach wykrywania.

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 w trybie offline, i aplikacja musi zsynchronizować dane lokalne z serwerem.

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

.

Tworzenie żądania zbiorczego

Oto przykładowe żądanie do interfejsu Merchant API. To żądanie łączy żądanie pobrania asortymentu regionalnego produktu z żądaniem wstawienia, które służy do aktualizowania asortymentu regionalnego tego samego produktu. Powinien mieć taki format:

  1. Użyj adresu https://merchantapi.googleapis.com/batch/{sub-api}/v1 jako podstawowego adresu URL.
  2. Określ granicę, aby oddzielić poszczególne zagnieżdżone żądania, np. -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
  3. Oddziel każde zagnieżdżone żądanie za pomocą ogranicznika, np. --batch_inventory.
  4. Na początku każdego zagnieżdżonego żądania umieść znak Content-Type: application/http.
  5. Użyj parametru 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ępnym ogranicznikiem pozostaw pusty wiersz.
  7. Nie umieszczaj podstawowego adresu URL w każdym 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 <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--
'

Uwagi dotyczące zamawiania

  • Żądania mogą nie być wykonywane w określonej przez Ciebie kolejności.
  • Używaj parametru Content-ID do identyfikowania poszczególnych żądań.
  • Jeśli musisz wykonywać wywołania w określonej kolejności, wysyłaj je osobno i przed wysłaniem kolejnego wywołania czekaj na odpowiedź na poprzednie.

Odczytywanie odpowiedzi zbiorczej

Oto przykładowa odpowiedź HTTP na żądanie wsadowe. Kolejność odpowiedzi może być inna niż kolejność żądań. Użyj parametru 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 znaku 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--
'