一次傳送多個要求

您可以透過 Merchant API 使用批次要求,在單一 API 呼叫中傳送多個 HTTP 要求。

如要使用用戶端程式庫進行批次處理,請參閱「重構程式碼以處理並行要求」。

批次要求是單一標準 HTTP 要求,其中包含多個 API 呼叫,並使用 multipart/mixed 內容類型。在主要 HTTP 要求中,每個部分都包含巢狀 HTTP 要求。

您可以將批次要求傳送至 API 指定的 batchPath。Merchant API 的batchPath為 batch/{sub-api}/v1。您可以在其他 API 的導覽文件中找到其 batchPath。

以下列舉一些批次處理要求的原因:

  • 您剛開始使用 API,且有大量資料要上傳。
  • 使用者在應用程式離線時變更資料,應用程式需要將本機資料與伺服器同步。

平行傳送多項要求可避免等待最慢的子要求,進而縮短伺服器回應時間並降低延遲。

編寫批次要求

以下是 Merchant API 批次要求範例。這項要求結合了擷取產品區域商品目錄的 GET 要求,以及更新同一產品區域商品目錄的插入要求。請務必完全遵照範例格式:

  1. 使用 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,以自己的 ID 標示每個巢狀要求。例如:Content-ID: <get~en~US~123456>。
  6. 在每個巢狀要求的標頭、路徑和主體之間加入空白行。如果巢狀要求沒有主體,請在下一個邊界前留空一行。
  7. 請勿在每個巢狀要求中加入基準網址。
  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 會在每個 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--

限制

批次要求有下列限制:

  • 2,000 個巢狀要求。

如果批次要求超過上述任一限制,API 就會傳回 400 Bad Request 錯誤,並拒絕整個要求。