一個HTTP方法是冪等的,指的是同樣的請求被執行一次與連續執行多次的效果是一樣的,服務器的狀態也是一樣的。
其實冪等就是一個操作或者接口,不管你調多少次,每次執行的結果都跟第一次一樣。
比如數學上,1這個數字就是冪等的,無論你用什么數字跟1乘,乘多少次,最后的結果都跟第一次是一樣的。
試想這樣的一種場景:在電商平台上支付后,因為網絡原因導致系統提示你支付失敗,於是你又重新付款了一次,等完成后檢查網銀發現被系統扣了兩次款,這是一種什么樣的體驗?
造成上述問題的原因可能有很多,比如第一次付款時實際支付成功,但是信息返回時網絡中斷導致系統誤判;又比如第一次付款的確失敗了,但第二次付款時發生意外,導致支付請求被重復發送等等。在一次支付的過程中,每個環節都有可能會發生問題,我們要如何規避這類問題引發的分險?
冪等性是解決這類問題的方案之一,所以在電商,銀行,互聯網金融等對數據准確性要求很高的領域中,這一特性具有十分重要的地位。
所以對於一些重要的接口或者操作,我們是要求后台保證其冪等性的。因為客戶端可能有重試機制,另外中間人攻擊可能會進行請求的重放,這些都有可能導致接口被多次調用,像上面的扣款操作,如果接口沒有實現冪等,那么后果是相當不堪設想的。
如何測試?
- 首先在需求分析的時候我們要有能力識別出需要實現冪等的接口,提前要求開發同學去實現;
- 測試過程中由於冪等的特性是多次調用的結果相同,那么可以用自動化的方式去反復調用,這樣會比較高效;
- 異常情況需要考慮到,比如除了第一次調用之外的調用是否有性能問題,稍微修改一些無關緊要的參數是否會破壞冪等之類的;