此頁面由英文翻譯而成。英文版為官方權威來源。如翻譯內容有任何不一致之處,請以英文版為準。
冪等性與重試
配送標籤涉及實際的成本和物流影響。重複標籤會導致營運混亂、配送費用浪費以及庫存追蹤錯誤。Flex Forward API 內建冪等性來防止此問題。冪等性的運作方式
POST /labels 端點使用 idempotencyKey 欄位,讓標籤建立可以安全地重試。使用特定金鑰的第一次請求會嘗試建立標籤。後續使用相同金鑰和相同本文的請求會以 HTTP 200 回傳已儲存的結果。使用不同本文重複金鑰會回傳 HTTP 409,代碼為 IDEMPOTENCY_CONFLICT。
第一次請求 — API 建立標籤並回傳 HTTP 201:
201 Created
idempotencyKey 和本文會回傳原始結果(HTTP 200),而不會建立新標籤:
200 OK(冪等重放)
IDEMPOTENCY_CONFLICT,請用原本文取得已儲存的結果,或為修改後的請求使用新金鑰。即使只變更 customerOrderNumber 而保留相同金鑰,仍會造成衝突。
較舊的標籤或其他工作流程建立的標籤可能沒有儲存本文指紋;這些記錄即使本文不同,也會維持原有的重放行為。請勿依賴衝突偵測來驗證舊標籤的細節。
選擇冪等性金鑰
金鑰應該唯一識別預期的標籤建立。良好的模式:400 驗證錯誤後,由於未建立標籤,可以重複使用相同的
idempotencyKey。修正請求後使用相同金鑰重試。重試策略
對於暫時性失敗(HTTP 500 或網路逾時),請使用指數退避重試:1
設定請求逾時
為 HTTP 請求設定合理的逾時時間(例如 30 秒)。
2
失敗時等待再重試
使用指數退避:1 秒、2 秒、4 秒、8 秒。
3
重複使用相同的冪等性金鑰
使用與原始請求相同的
idempotencyKey 和未修改的本文重試。即使原始請求已成功但回應遺失,也能取得已儲存的結果。4
限制重試次數
在 3–5 次重試後停止。如果請求仍然失敗,記錄錯誤並升級調查。
重試失敗的標籤
失敗的標籤對其idempotencyKey 而言是最終結果,且會保留其 customerOrderNumber。
請先修正原因 — 地址、產品代碼或帳戶設定。大多數物流業者拒絕並非暫時性問題。
接著送出一個新的請求,使用新的 idempotencyKey 與新的 customerOrderNumber(或省略此欄位以自動產生)。重複使用該編號會回傳 409 DUPLICATE_CUSTOMER_ORDER_NUMBER。建議的模式是附加嘗試次數後綴,例如 N-2026-05-27-TEST-03-2,並將完整訂單編號控制在 40 個字元以內。請將您原始的訂單參考保留在 order.orderNumbers.referenceNumbers 中。允許使用的字元請參閱客戶訂單編號。
失敗標籤所回傳的錯誤內容,請參閱下游物流業者錯誤 502 與 422。
各端點的冪等性
失敗場景
收到回應前的網路逾時
收到回應前的網路逾時
標籤可能已建立也可能未建立。請使用相同的
idempotencyKey 和未修改的本文重試。若已儲存嘗試結果,API 會以 HTTP 200 回傳該結果,包含任何已儲存的失敗結果。否則會再次嘗試建立;成功則回傳 HTTP 201。HTTP 500 內部伺服器錯誤
HTTP 500 內部伺服器錯誤
暫時性伺服器錯誤。使用相同的
idempotencyKey 並以退避策略重試。HTTP 502 錯誤閘道(物流業者錯誤)
HTTP 502 錯誤閘道(物流業者錯誤)
物流業者拒絕了請求。標籤已在此
idempotencyKey 下以 status: failed 儲存。使用相同金鑰重試會以 HTTP 200 回傳相同的失敗結果,且不會再次聯絡物流業者。若要重新嘗試,請參閱「重試失敗的標籤」。HTTP 400 驗證錯誤
HTTP 400 驗證錯誤
請求無效。未修正請求前請勿重試。由於未建立標籤,修正請求本文後可以重複使用相同的
idempotencyKey。HTTP 409 衝突
HTTP 409 衝突
請先查看
code。IDEMPOTENCY_CONFLICT 表示應使用原本文,或為修改後的請求使用新金鑰。DUPLICATE_CUSTOMER_ORDER_NUMBER 表示應取得現有標籤,或選擇其他訂單編號。請勿針對未變更的衝突請求持續重試。