重複資料從哪裡來?
- 使用者連續點擊送出。
- 網路不穩造成瀏覽器或中介層重試。
- 前端逾時後再次 POST。
- 兩個執行程序同時查詢,皆認為資料不存在。
requestToken 與 requestId 的角色
requestToken 用於辨識同一次提交,應在前端建立並在 POST 與狀態查詢中保持一致。requestId 是資料成功建案後供人員追蹤的案件識別。兩者不應混為同一用途。
後端冪等流程
- 驗證並正規化 token。
- 取得鎖後再次依 token 查詢。
- 若已存在,沿用原 requestId,不新增資料列。
- 若不存在,建立 requestId 並寫入一列。
- 保存成功後更新狀態。
鎖定逾時只能描述當次執行,不能覆蓋另一個正在處理相同 token 的共享狀態。
重試也必須能恢復部分寫入
若資料列已建立,但最後狀態更新失敗,重試必須找回原列、沿用 requestId 並補齊狀態;不能再 append 第二列。