Как отправить сразу несколько запросов

Вы можете использовать пакетные запросы к 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 для обновления регионального ассортимента того же товара. Формат должен быть точно таким, как в примере:

  1. В качестве базового URL используйте https://merchantapi.googleapis.com/batch/{sub-api}/v1.
  2. Укажите границу, чтобы разделить вложенные запросы, например: -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \.
  3. Разделяйте вложенные запросы границей, например --batch_inventory.
  4. В начале каждого вложенного запроса укажите Content-Type: application/http.
  5. Используйте Content-ID, чтобы пометить каждый вложенный запрос собственным идентификатором. Пример: Content-ID: <get~en~US~123456>.
  6. Между заголовком, путем и телом каждого вложенного запроса должна быть пустая строка. Если у вложенного запроса нет тела, оставьте пустую строку перед следующим разделителем.
  7. Не добавляйте базовый URL в каждый вложенный запрос.
  8. Завершите основной запрос конечным разделителем, например --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 и отклоняет весь запрос.