重複資料從哪裡來?

  • 使用者連續點擊送出。
  • 網路不穩造成瀏覽器或中介層重試。
  • 前端逾時後再次 POST。
  • 兩個執行程序同時查詢,皆認為資料不存在。

requestToken 與 requestId 的角色

requestToken 用於辨識同一次提交,應在前端建立並在 POST 與狀態查詢中保持一致。requestId 是資料成功建案後供人員追蹤的案件識別。兩者不應混為同一用途。

後端冪等流程

  1. 驗證並正規化 token。
  2. 取得鎖後再次依 token 查詢。
  3. 若已存在,沿用原 requestId,不新增資料列。
  4. 若不存在,建立 requestId 並寫入一列。
  5. 保存成功後更新狀態。

鎖定逾時只能描述當次執行,不能覆蓋另一個正在處理相同 token 的共享狀態。

重試也必須能恢復部分寫入

若資料列已建立,但最後狀態更新失敗,重試必須找回原列、沿用 requestId 並補齊狀態;不能再 append 第二列。

需要設計安全的建案流程?

可先從一張 Sheet、一份表單與一個通知流程開始驗證。

申請流程評估查看服務