С помощью API для продавцов можно использовать пакетные запросы, позволяющие отправлять несколько HTTP-запросов в рамках одного вызова API.
Если вы предпочитаете выполнять пакетную обработку с помощью клиентских библиотек , см. раздел «Рефакторинг кода для параллельных запросов» .
Пакетный запрос — это один стандартный HTTP-запрос, содержащий несколько вызовов API, использующих тип содержимого multipart/mixed . Внутри основного HTTP-запроса каждая часть содержит вложенный HTTP-запрос.
Вы можете отправить пакетный запрос по указанному batchPath для API. batchPath для Merchant API — batch/{sub-api}/v1 . Для других API batchPath можно найти в их документации по обнаружению .
Примеры причин для объединения запросов в группы включают:
- Вы только начали использовать API и вам нужно загрузить большой объем данных.
- Пользователь внес изменения в данные, когда ваше приложение было отключено, и вашему приложению необходимо синхронизировать локальные данные с сервером.
Отправка нескольких запросов параллельно позволяет избежать ожидания самого медленного подзапроса, что улучшает время отклика сервера и снижает задержку.
Напишите пакетный запрос
Вот пример пакетного запроса к Merchant API. Этот запрос объединяет запрос GET для получения регионального ассортимента товара и запрос INSERT для обновления регионального ассортимента того же товара. Вам следует точно следовать формату примера:
- Используйте
https://merchantapi.googleapis.com/batch/{sub-api}/v1в качестве базового URL. - Укажите разделитель для каждого вложенного запроса, например:
-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 <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--
'
Примечания к заказу
- Запросы могут выполняться не в том порядке, в котором вы их укажете.
- Используйте
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--
'