介面冪等性校驗
阿新 • • 發佈:2021-10-14
一、概念
一個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同
通俗的說就是一個介面, 多次發起同一個請求, 必須保證操作只能執行一次,比如:
1,訂單介面, 不能多次建立訂單
2,支付介面, 重複支付同一筆訂單隻能扣一次錢
3,支付寶回撥介面, 可能會多次回撥, 必須處理重複回撥
4,普通表單提交介面, 因為網路超時等原因多次點選提交, 只能成功一次
二、常見方案
三、案例
1,狀態機
通過狀態判斷是否已經執行,是則跳過
//先做冪等性校驗 RuleTaskVO rt = ruleTaskDao.selectRuleTask(ruleTaskDTO); if(rt == null|| ReviewStatusEnums.SUCCESS.getCode().intValue() == rt.getReviewStatusId() || ReviewStatusEnums.FAIL.getCode().intValue() == rt.getReviewStatusId() ){ logger.info("此規則任務重複審查"); return; }
2,Token機制+redis
2.1,每一次請求建立一個唯一標識token, 先獲取token, 並將此token存入redis。 2.2,請求介面時, 將此token放到header或者作為請求引數請求介面。2.3,後端介面判斷redis中是否存在此token, 如果存在, 正常處理業務邏輯, 並從redis中刪除此token, 如果不存在, 說明引數不合法或者是重複請求, 返回提示即可。