Aby wysłać wiele żądań HTTP w jednym wywołaniu interfejsu API, możesz użyć żądań zbiorczych w interfejsie Merchant API.
Jeśli wolisz wykonywać grupowanie za pomocą bibliotek klienta, przeczytaj artykuł Refactoring kodu pod kątem równoczesnych żądań.
Żądanie zbiorcze to jedno standardowe żądanie HTTP zawierające wiele wywołań interfejsu API z użyciem typu treści multipart/mixed
. W ramach głównego żądania HTTP każda część zawiera zagnieżdżone żądanie HTTP.
Możesz wysłać żądanie zbiorcze do określonego batchPath
interfejsu API.
batchPath
w wersji beta interfejsu Merchant API to batch/{sub-api}/v1beta
. batchPath
innych interfejsów API znajdziesz w ich dokumentach informacyjnych. Oto przykłady powodów, dla których warto grupować prośby:
- dopiero zaczęłaś/zacząłeś korzystać z interfejsu API i musisz przesłać dużo danych.
- Użytkownik wprowadził zmiany w danych, gdy aplikacja była offline, i musi zsynchronizować dane lokalne z serwerem.
Tworzenie zbiorczego żądania
Oto przykład żądania zbiorczego interfejsu Merchant API. To żądanie łączy żądanie GET służące do pobierania regionalnego asortymentu produktu z żądaniem INSERT służącym do aktualizowania regionalnego asortymentu tego samego produktu. Format powinien być identyczny z przykładem:
- Jako adres URL bazowy użyj adresu
https://merchantapi.googleapis.com/batch/{sub-api}/v1beta
. - Określ granicę, aby oddzielić od siebie poszczególne żądania zagnieżdżone, np.:
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
- Oddziel każde zagnieżdżone żądanie za pomocą granicy, np.
--batch_inventory
. - Umieszczaj
Content-Type: application/http
na początku każdego zagnieżdżonego żądania. - Użyj atrybutu
Content-ID
, aby oznaczyć każde zagnieżdżone żądanie własnym identyfikatorem. Na przykład:Content-ID: <get:online:en:US:123456>
. - Dodaj pustą linię między nagłówkiem, ścieżką i tekstem żądania zagnieżdżonego. Jeśli zagnieżbione żądanie nie zawiera treści, przed następną granicą pozostaw pustą linię.
- Nie dołączaj podstawowego adresu URL w każdej osobnej zagnieżdżonej prośbie.
- Zakończ główne żądanie za pomocą ostatniej granicy, na przykład
--batch_inventory–
.
curl https://merchantapi.googleapis.com/batch/inventories/v1beta \
-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/v1beta/accounts/123/products/online:en:US:123456/regionalInventories
--batch_inventory
Content-Type: application/http
Content-ID: <post:online:en:US:123456>
POST /inventories/v1beta/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 zostać wykonane w kolejności, w jakiej je podano.
- Użyj
Content-ID
, aby zidentyfikować poszczególne żądania. - Jeśli musisz wykonać wywołania w określonej kolejności, wyślij je osobno i zaczekaj na odpowiedź na pierwsze żądanie, zanim wyślesz kolejne.
Czytanie odpowiedzi zbiorczej
Oto przykład odpowiedzi zbiorczej HTTP. Kolejność odpowiedzi może być inna niż kolejność żądań. Użyj atrybutu Content-ID
, aby określić, do której zagnieżdżonej prośby należy każda odpowiedź zagnieżdżona. W odpowiedziach interfejs API dodaje prefiks response-
do każdego elementu Content-ID
.
--batch_inventory
Content-Type: application/http
Content-ID: <response-get:online: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:online: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/online:en:US:123456/regionalInventories/123456",
"region": "123456",
"price": {
"amountMicros": "100000000",
"currencyCode": "USD"
}
}
--batch_inventory--
'