您可以使用 批量请求 通过 Merchant API 在单个 API 调用中发送多个 HTTP 请求。
如果您希望使用 客户端 库执行批处理,请参阅重构代码以进行并发 请求。
批量请求是一个包含多个 API 调用的标准 HTTP 请求,使用 multipart/mixed 内容类型。在主 HTTP
请求中,每个部分都包含一个嵌套的 HTTP 请求。
您可以将批量请求发送到 API 的指定 batchPath。Merchant API 的 batchPath 为
batch/{sub-api}/v1。您可以在其他 API 的
batchPath 发现
文档中找到其。
以下是一些需要批量处理请求的原因示例:
- 您刚刚开始使用该 API,需要上传大量数据。
- 用户在应用离线时对数据进行了更改,您的应用需要将本地数据与服务器同步。
并行发送多个请求可避免您等待最慢的子请求,从而缩短服务器响应时间并减少延迟。
编写批量请求
以下是 Merchant API 批量请求的示例。此请求将检索产品的区域库存的 get 请求与更新同一产品的区域库存的 insert 请求相结合。您应完全按照示例的格式进行操作:
- 使用
https://merchantapi.googleapis.com/batch/{sub-api}/v1作为基本网址。 - 指定一个边界来分隔每个嵌套的请求,例如:
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \ - 使用边界分隔每个嵌套的请求,例如
--batch_inventory。 - 在每个嵌套的请求的开头添加
Content-Type: application/http。 - 使用
Content-ID为每个嵌套的请求添加您自己的 ID 标签。例如:Content-ID: <get~en~US~123456>。 - 在每个嵌套的请求的标头、路径和正文之间添加一个空行。如果嵌套的请求没有正文,请在下一个边界之前留一个空行。
- 请勿在每个单独的嵌套请求中添加基本网址。
- 使用最终边界结束主请求,例如
--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 会为每个 Content-ID 添加 response- 前缀。
--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--
'