冪等性與重試
配送標籤涉及實際的成本和物流影響。重複標籤會導致營運混亂、配送費用浪費以及庫存追蹤錯誤。Flex Forward API 內建冪等性來防止此問題。冪等性的運作方式
POST /labels 端點使用 idempotencyKey 欄位來確保每個標籤建立請求只會被處理一次。
第一次請求 — API 建立標籤並回傳 HTTP 201:
201 Created
idempotencyKey 會回傳原始結果(HTTP 200),而不會建立新標籤:
200 OK(冪等重放)
選擇冪等性金鑰
金鑰應該唯一識別預期的標籤建立。良好的模式:| 模式 | 範例 | 使用場景 |
|---|---|---|
| 訂單 ID | ord-20250301-abc123 | 每個訂單一個標籤 |
| 訂單 + 序號 | ord-20250301-abc123-1 | 每個訂單多個標籤 |
| UUID | f47ac10b-58cc-4372-a567-0e02b2c3d479 | 通用 |
400 驗證錯誤後,由於未建立標籤,可以重複使用相同的
idempotencyKey。修正請求後使用相同金鑰重試。重試策略
對於暫時性失敗(HTTP 500、502 或網路逾時),請使用指數退避重試:各端點的冪等性
| 端點 | 冪等 | 機制 |
|---|---|---|
POST /labels | 是 | idempotencyKey 欄位 — 每個請求中必填 |
GET /labels/{id} | 是 | 唯讀 — 天然冪等 |
GET /tracking/{id} | 是 | 唯讀 — 天然冪等 |
失敗場景
收到回應前的網路逾時
收到回應前的網路逾時
標籤可能已建立也可能未建立。使用相同的
idempotencyKey 重試。如果標籤已建立,API 會回傳 HTTP 200 和原始結果。如果未建立,API 會建立標籤並回傳 HTTP 201。HTTP 500 內部伺服器錯誤
HTTP 500 內部伺服器錯誤
暫時性伺服器錯誤。使用相同的
idempotencyKey 並以退避策略重試。HTTP 502 錯誤閘道(物流業者錯誤)
HTTP 502 錯誤閘道(物流業者錯誤)
物流業者服務回傳錯誤。標籤以
status: failed 保存。重試前請檢查錯誤訊息 — 部分物流業者錯誤需要修改請求(如無效地址)。對於暫時性的物流業者問題,使用相同的 idempotencyKey 重試。HTTP 400 驗證錯誤
HTTP 400 驗證錯誤
請求無效。未修正請求前請勿重試。由於未建立標籤,修正請求本文後可以重複使用相同的
idempotencyKey。