你可以使用 Merchant API 的批次要求,在單一 API 呼叫中傳送多個 HTTP 要求。
如要使用用戶端程式庫執行批次處理,請參閱「重構程式碼以處理並行要求」。
批次要求是單一標準 HTTP 要求,內含多個使用 multipart/mixed
內容類型的 API 呼叫。在主要 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--
'