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 równoczesnych żą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 parametru batchPath interfejsu API. Parametr batchPath interfejsu API sprzedawcy to batch/{sub-api}/v1.
ParametrbatchPath 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ć asortyment regionalny produktu, oraz żądanie insert, aby zaktualizować asortyment regionalny tego samego produktu. Powinieneś(-aś) dokładnie przestrzegać formatu przykładu:
- Jako podstawowy adres URL użyj
https://merchantapi.googleapis.com/batch/{sub-api}/v1. - Określ granicę, aby oddzielić każde zagnieżdżone żądanie, np.
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \ - Oddziel każde zagnieżdżone żądanie granicą, np.
--batch_inventory. - Na początku każdego zagnieżdżonego żądania umieść
Content-Type: application/http. - Użyj
Content-ID, aby oznaczyć każde zagnieżdżone żądanie własnym identyfikatorem. Przykład:Content-ID: <get~en~US~123456>. - 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.
- Nie umieszczaj podstawowego adresu URL w każdym pojedynczym zagnieżdżonym żądaniu.
- Zakończ główne żądanie ostatnią 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 kolejności
- Żądania mogą nie być wykonywane w określonej przez Ciebie kolejności.
- 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--
'