表單重復提交問題(接口冪等性)


  近期工作中遇到用戶重復提交表單信息情況,尤其是在網絡延時的情況下,用戶點擊提交按鈕后,頁面遲遲未響應,於是就會再次點擊提交按鈕。這樣就導致產生重復數據,會對后續的業務帶來一定問題。為此,查了一些資料,學習總結了下相關問題的解決思路。

  首先,重復提交的問題,專業點的說法叫做接口冪等性問題。一個接口, 多次發起同一個請求,必須保證操作只能執行一次;出現這類問題的常見業務場景有:  

**使用場景:


  1.訂單接口(不能多次創建同一訂單)
  2.支付接口, 重復支付同一筆訂單只能扣一次錢
  3.支付寶回調接口,可能會多次回調, 必須處理重復回調
  4.普通表單提交接口,因為網絡超時等原因多次點擊提交, 只能成功一次等等

 

**常用解決方案

  1.唯一索引 -- 防止新增臟數據
  2.token機制 -- 防止頁面重復提交
  3.悲觀鎖 -- 獲取數據的時候加鎖(鎖表或鎖行)
  4.樂觀鎖 -- 基於版本號version實現, 在更新數據那一刻校驗數據
  5.分布式鎖 -- redis(jedis、redisson)或zookeeper實現
  6.狀態機制 -- 狀態變更, 更新數據時判斷狀態


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM