1. 程式人生 > >後端介面的冪等性

後端介面的冪等性

介面的冪等性:就是介面可重複呼叫,在呼叫多次的情況下,介面最終得到的結果是一致的。 所有的介面可分為增刪改查。,查詢功能具有天然的冪等性,增加、更新、刪除都要保證冪等性。 全域性唯一ID 全域性唯一ID就是根據業務的操作和內容生成一個全域性ID,在執行操作前先根據這個ID是否存在,來判斷這個操作是否已經執行。如果不存在則吧全域性ID,儲存到儲存系統中,比如資料庫、redis。如果存在則表示該方法已執行。

還需要考慮其他問題:比如一臺機器雖然把全域性ID寫入了儲存,但是寫入後掛了,這需要引入***全域性ID的超時機制***

去重表 這種方法是適用於在業務中有唯一標的插入場景,比如一個訂單隻會支付一次,所以訂單ID可以作為唯一標識。這時可以建立一個去重表,並把唯一標識作為唯一索引,實現時,把建立支付單據和寫入去重表,放在一個事務中,如果重複建立,資料庫就會丟擲唯一約束異常,操作就會回滾。

狀態機控制 這種方法適合在有狀態流轉的情況下,如果訂單建立和付款。設計訂單狀態欄位時,使用int型別,並通過值型別的大小做冪等。

插入或更新 這種方法插入並且有唯一索引的情況,比如要關聯商品品類,商品ID和品類ID可以構成唯一索引,並且在資料庫中頁做了唯一索引。 更新業務介面冪等性一般通過各種層面的鎖和cas機制。表單要防重複提交

新增業務 同一個使用者用同樣的資料多次請求同一個介面,防重複提交,業務資料連同token,一起提交,同一個token只能被正確的處理一次。應該快取某次新增業務處理的結果,如果上一次請求時出現某些異常,比如資料庫連線失敗,使用者再次提交的時候,我們應該放行使用者的這次請求,當然有些異常就不需要放行了,比如提交的業務資料不對等

測試用例 通過下面的方法可以初步驗證介面冪等性的健壯性:

  1. 同一個請求,多次提交到同一臺節點,多次提交到不同的節點
  2. 同一個請求,同時到達同一個節點,同時到達到不同的節點 3. 有邏輯先後順序的訊息、請求亂序的處理,比如建立訂單的請求和支付訂單的請求,不能保證第一個請求先於第二個請求到達伺服器;