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, przeczytaj artykuł 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 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 podanego w przykładzie:
- Jako podstawowy adres URL użyj
https://merchantapi.googleapis.com/batch/{sub-api}/v1. - Określ granicę, która będzie oddzielać poszczególne zagnieżdżone żądania, np.
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \. - Oddziel poszczególne zagnieżdżone żądania 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 zagnieżdżonym żądaniu.
- 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 kolejności
- Żądania mogą nie być wykonywane w kolejności, w jakiej je określisz.
- 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.
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 prefiks response- do każdego 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--
'