Jednoczesne wysyłanie wielu próśb

Za pomocą żądań zbiorczych 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 jedno 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 Merchant API batchPath wynosi batch/{sub-api}/v1. 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 API sprzedawcy. Ta prośba łączy prośbę get o pobranie asortymentu regionalnego produktu i prośbę insert o zaktualizowanie 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. 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ę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 {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żywaj parametru Content-ID do identyfikowania poszczególnych żądań.
  • Jeśli musisz wykonać wywołania w określonej kolejności, wyślij je osobno i poczekaj na odpowiedź na pierwsze żądanie, zanim wyślesz kolejne.

Odczytywanie odpowiedzi zbiorczej

Oto przykładowa odpowiedź HTTP na żądanie zbiorcze. Kolejność odpowiedzi może być inna niż kolejność żądań. Użyj Content-ID, aby określić zagnieżdżone żądanie, do którego należy każda zagnieżdżona odpowiedź. W odpowiedziach interfejs API dodaje do każdego parametru 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--

Limity

Żądania zbiorcze mają te ograniczenia:

  • 2000 zagnieżdżonych żądań w każdym żądaniu zbiorczym.

Jeśli żądanie wsadowe przekracza którykolwiek z tych limitów, interfejs API zwraca błąd400 Bad Request i odrzuca całe żądanie.