《轉》冪等性的測試

2022-07-07 02:48:13 字數 1009 閱讀 2961

很多同學都應該聽過冪等這個概念,但如果在面試中真的被問起來什麼是冪等,你有信心去解釋清楚麼?

首先看看冪等的定義。

乙個http方法是冪等的,指的是同樣的請求被執行一次與連續執行多次的效果是一樣的,伺服器的狀態也是一樣的。換句話說就是,冪等方法不應該具有***(統計用途除外)。在正確實現的條件下,get,head,put和delete 等方法都是冪等的,而 post 方法不是。所有的 safe 方法也都是冪等的。

冪等性只與後端伺服器的實際狀態有關,而每一次請求接收到的狀態碼不一定相同。例如,第一次呼叫delete 方法有可能返回 200,但是後續的請求可能會返回404。delete 的言外之意是,開發者不應該使用delete方法實現具有刪除最後條目功能的 restful api。

需要注意的是,伺服器不一定會確保請求方法的冪等性,有些應用可能會錯誤地打破冪等性約束。

是不是有點抽象?

再看看英文的定義

嗯,看上去問題更加複雜了。

其實冪等就是乙個操作或者介面,不管你調多少次,每次執行的結果都跟第一次一樣。

比如數學上,1這個數字就是冪等的,無論你用什麼數字跟1乘,乘多少次,最後的結果都跟第一次是一樣的。

試想這樣的一種場景:在電商平台上支付後,因為網路原因導致系統提示你支付失敗,於是你又重新付款了一次,等完成後檢查網銀發現被系統扣了兩次款,這是一種什麼樣的體驗?

造成上述問題的原因可能有很多,比如第一次付款時實際支付成功,但是資訊返回時網路中斷導致系統誤判;又比如第一次付款的確失敗了,但第二次付款時發生意外,導致支付請求被重**送等等。在一次支付的過程中,每個環節都有可能會發生問題,我們要如何規避這類問題引發的分險?

冪等性是解決這類問題的方案之一,所以在電商,銀行,網際網路金融等對資料準確性要求很高的領域中,這一特性具有十分重要的地位。

所以對於一些重要的介面或者操作,我們是要求後台保證其冪等性的。因為客戶端可能有重試機制,另外中間人攻擊可能會進行請求的重放,這些都有可能導致介面被多次呼叫,像上面的扣款操作,如果介面沒有實現冪等,那麼後果是相當不堪設想的。

原子性 冪等性

原子性 如果這個操作所處的層 layer 的更高層不能發現其內部實現與結構,那麼這個操作是乙個原子 atomic 操作。原子操作可以是乙個步驟,也可以是多個操作步驟,但是其順序不可以被打亂,也不可以被切割而只執行其中的一部分。將整個操作視作乙個整體是原子性的核心特徵。冪等性 再簡單一點說,在乙個業務...

冪等性學習及介面的冪等性

冪等性學習 一 什麼是冪等性 在這裡需要有以下幾個問題需要注意 2 冪等性不僅僅只是一次或者多次請求的時候對資源沒有 比如根據id對資料庫的查詢操作,此操作對資料庫沒有增刪改,所以多次查詢操作對資料庫結果是沒有任何影響的 3 冪等性還包括了第一次請求資源的時候,對資源產生了 但是在以後多次同樣的請求...

了解冪等性

2 什麼是冪等性 f x f x x被函式f作用一次和作用無限次的結果是一樣的。冪等性應用在軟體系統中,我把它簡單定義為 某個函式或者某個介面使用相同引數呼叫一次或者無限次,其造成的後果是一樣的,在實際應用中一般針對於介面進行冪等性設計。舉個栗子,在系統中,呼叫方a呼叫系統b的介面進行使用者的扣費操...