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

Вы можете использовать пакетные запросы в Merchant API, чтобы отправлять несколько HTTP-запросов в одном вызове API.

Если вы предпочитаете использовать клиентские библиотеки, ознакомьтесь с разделом Рефакторинг кода для параллельных запросов.

Пакетный запрос – это стандартный HTTP-запрос, содержащий несколько вызовов API и использующий тип контента multipart/mixed. Внутри основного HTTP-запроса каждая часть содержит вложенный HTTP-запрос.

Пакетный запрос можно отправить в указанную batchPath для API. batchPath для Merchant API – batch/{sub-api}/v1. Значения batchPath для других API можно найти в их discovery-документах.

Вот несколько примеров того, когда это может быть полезно:

  • Вы только начали использовать 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 и отклоняет весь запрос.