Jednoczesne wysyłanie wielu próśb

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

Jeśli wolisz grupować żądania za pomocą bibliotek klienta, przeczytaj artykuł Refaktoryzacja kodu pod kątem 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 ich dokumentach dotyczących odkrywania.

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 produktów dostępnych lokalnie z serwerem.

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

Tworzenie żądania zbiorczego

Oto przykładowe żądanie zbiorcze do Merchant API. To żądanie łączy żądanie get pobrania asortymentu regionalnego produktu i żądanie insert zaktualizowania asortymentu regionalnego tego samego produktu. Powinien on mieć dokładnie taki format 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żdą zagnieżdżoną prośbę, np. -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
  3. Każde zagnieżdżone żądanie oddzielaj od siebie za pomocą ogranicznika, np.--batch_inventory.
  4. Na początku każdego zagnieżdżonego żądania umieść 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 wstaw 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 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 wsadowej

Oto przykład odpowiedzi HTTP na żądanie wsadowe. Kolejność odpowiedzi może nie odpowiadać kolejności żądań. Użyj parametru 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 znaku 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 limity:

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

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