Możesz używać żądań zbiorczych z interfejsem Merchant API, aby wysyłać wiele żądań HTTP w jednym wywołaniu interfejsu API.
Jeśli wolisz wykonywać grupowanie za pomocą bibliotek klienta, zapoznaj się z artykułem Refaktoryzacja kodu pod kątem żądań równoczesnych.
Żądanie zbiorcze to pojedyncze standardowe żądanie HTTP zawierające wiele wywołań interfejsu API, które używa 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.
batchPath dla interfejsu Merchant API to batch/{sub-api}/v1. Wartość batchPath dla innych interfejsów API znajdziesz w ich dokumentach opisujących.
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 aplikacja była 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 odpowiedzi serwera i czas oczekiwania.
Tworzenie żądania zbiorczego
Oto przykładowe żądanie zbiorcze do interfejsu Merchant API. To żądanie łączy żądanie GET, które pobiera asortyment regionalny produktu, i żądanie wstawienia, które aktualizuje asortyment regionalny tego samego produktu. Użyj dokładnie takiego formatu jak w przykładzie:
- Użyj
https://merchantapi.googleapis.com/batch/{sub-api}/v1jako podstawowego adresu URL. - Określ granicę, aby oddzielić każde zagnieżdżone żądanie, na przykład:
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \ - Oddziel każde zagnieżdżone żądanie granicą, na przykład
--batch_inventory. - Na początku każdego zagnieżdżonego żądania dodaj
Content-Type: application/http. - Użyj
Content-ID, aby oznaczyć każde zagnieżdżone żądanie własnym identyfikatorem. Na przykład:Content-ID: <get~en~US~123456>. - Wstaw pusty wiersz między nagłówkiem, ścieżką i treścią każdego zagnieżdżonego żądania. Jeśli zagnieżdżone żądanie nie ma treści, przed następną granicą pozostaw pusty wiersz.
- Nie dołączaj podstawowego adresu URL do każdego zagnieżdżonego żądania.
- Zakończ główne żądanie ostateczną granicą, na przykład
--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żyj
Content-ID, aby zidentyfikować poszczególne żądania. - Jeśli chcesz, aby wywołania były wykonywane w określonej kolejności, wysyłaj je osobno i poczekaj na odpowiedź na pierwsze żądanie, zanim wyślesz kolejne.
Odczytywanie odpowiedzi zbiorczej
Oto przykład odpowiedzi HTTP na żądanie zbiorcze. Kolejność odpowiedzi może nie odpowiadać kolejności żądań. Użyj Content-ID, aby określić, do którego zagnieżdżonego żądania należy każda zagnieżdżona odpowiedź. W odpowiedziach interfejs API dodaje prefiks response- do każdego elementu 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--
Limity
Żądania zbiorcze mają te limity:
- 2000 żądań zagnieżdżonych na żądanie zbiorcze.
Jeśli żądanie zbiorcze przekroczy którykolwiek z tych limitów, interfejs API zwróci błąd 400 Bad Request i odrzuci całe żądanie.