Вы можете использовать пакетные запросы к Merchant API, чтобы отправлять несколько HTTP-запросов в одном вызове API.
Если вы хотите использовать для создания пакетов клиентские библиотеки, ознакомьтесь со статьей Как изменить код для одновременных запросов.
Пакетный запрос – это стандартный HTTP-запрос, содержащий несколько вызовов API с типом контента multipart/mixed. В основном HTTP-запросе каждая часть содержит вложенный HTTP-запрос.
Вы можете отправить пакетный запрос в указанную конечную точку API batchPath.
batchPath для Merchant API – batch/{sub-api}/v1. Параметр batchPath для других API можно найти в их документах обнаружения.
Примеры причин, по которым стоит объединять запросы в пакеты:
- Вы только начали использовать API и вам нужно загрузить много данных.
- Пользователь изменил данные, когда приложение было офлайн, и теперь приложению нужно синхронизировать локальные данные с сервером.
Отправка нескольких запросов параллельно позволяет не ждать самого медленного подзапроса, что сокращает время ответа сервера и задержку.
Как написать пакетный запрос
Ниже приведен пример пакетного запроса к Merchant API. Этот запрос сочетает запрос get для получения регионального ассортимента товара и запрос insert для обновления регионального ассортимента того же товара. Формат должен быть точно таким, как в примере:
- В качестве базового URL используйте
https://merchantapi.googleapis.com/batch/{sub-api}/v1. - Укажите границу, чтобы разделить вложенные запросы, например:
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \. - Разделяйте вложенные запросы границей, например
--batch_inventory. - В начале каждого вложенного запроса укажите
Content-Type: application/http. - Используйте
Content-ID, чтобы пометить каждый вложенный запрос собственным идентификатором. Пример:Content-ID: <get~en~US~123456>. - Между заголовком, путем и телом каждого вложенного запроса должна быть пустая строка. Если у вложенного запроса нет тела, оставьте пустую строку перед следующим разделителем.
- Не добавляйте базовый URL в каждый вложенный запрос.
- Завершите основной запрос конечным разделителем, например
--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--'
Примечания о порядке
- Запросы могут выполняться не в том порядке, в котором вы их указали.
- Используйте
Content-ID, чтобы идентифицировать отдельные запросы. - Если вам нужно выполнить вызовы в определенном порядке, отправляйте их по отдельности и дождитесь ответа на первый запрос, прежде чем отправлять следующий.
Как прочитать ответ на пакетный запрос
Ниже приведен пример пакетного HTTP-ответа. Порядок ответов может не совпадать с порядком запросов. Используйте Content-ID, чтобы определить, к какому вложенному запросу относится каждый вложенный ответ. В ответах API добавляет префикс response- к каждому 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--
Ограничения
Для пакетных запросов действуют следующие ограничения:
- 2000 вложенных запросов на пакетный запрос.
Если пакетный запрос превышает какое-либо из этих ограничений, API возвращает ошибку 400 Bad Request и отклоняет весь запрос.