首先理解一下冪等性:
冪等
? ? ? ?對于同一種行為震捣,如果執(zhí)行不論多少次荔棉,最終的結果都是一致相同的,就稱這種行為是冪等的蒿赢。
非冪等
? ? ? ?對于同一種行為润樱,如果最終的結果與執(zhí)行的次數有關,每次執(zhí)行后結果都不相同羡棵,就稱這種行為為非冪等壹若。
? ? ? ?下面就結合HTTP GET、DELETE皂冰、PUT舌稀、POST來介紹下這四種主要方法的語義和冪等性。
-
HTTP GET方法用于獲取資源灼擂,不應有副作用壁查,所以是冪等的。
? ? ? ?例如:GET http://www.*****.com/article/123
剔应,不會改變資源的狀態(tài)睡腿,所以無論獲取多少次,都是沒有副作用的峻贮。需要注意的是席怪,沒有副作用并不代表返回的結果相同,例如GET http://www.*****.com/latest-article
纤控,返回最新文章挂捻,雖然其返回的內容可能是不同的,但是沒有對資源產生副作用船万,所以GET方法是冪等的刻撒。
-
HTTP DELETE方法用于刪除資源,有副作用耿导,但它應該滿足冪等性声怔。
? ? ? ?例如:DELETE http://www.*****.com/article/123
,調用多少次舱呻,對系統產生的副作用都是相同的醋火,即是刪除ID為123的文章,其對應的是刪除資源本身,無論調用多少次或刷新頁面芥驳,不必擔心引起錯誤柿冲,它是滿足冪等性的。
比較容易混淆的是PUT和POST:
? ? ? ?POST和PUT的區(qū)別容易被簡單地誤認為“POST表示創(chuàng)建資源兆旬,PUT表示更新資源”假抄;而實際上,二者均可用于創(chuàng)建資源爵憎,更為本質的差別是在冪等性方面慨亲。
-
POST所對應的URI并非創(chuàng)建的資源本身婚瓜,而是資源的接收者宝鼓,所以它不是冪等的。
? ? ? ?例如:POST http://www.*****.com/article
的語義是在http://www.*****.com/article下創(chuàng)建一篇文章巴刻,HTTP響應中應包含文章的創(chuàng)建狀態(tài)以及文章的URI愚铡。兩次相同的POST請求會在服務器端創(chuàng)建兩份資源,它們具有不同的URI胡陪;所以沥寥,POST方法不具備冪等性。
-
PUT所對應的URI是要創(chuàng)建或更新的資源本身柠座,所以它是冪等的邑雅。
? ? ? ?例如:PUT http://www.*****.com/article/123
的語義是創(chuàng)建或更新ID為123的文章。對同一URI進行多次PUT的副作用和一次PUT是相同的妈经;因此淮野,PUT方法具有冪等性。