日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HTTP请求方法及幂等性

發布時間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP请求方法及幂等性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

🔥本文簡要🔥

同學們好!本篇文章主要是介紹HTTP的冪等性。HTTP方法的冪等性是指一次和多次請求某一個資源應該具有同樣的副作用。

  • 😄博主:程序員一燈,一個老菜鳥,哈哈哈哈

  • 🚌一個人可以走的很快,一群人可以走的很遠🇨🇳

  • 🎉點贊?評論?收藏??關注== 養成習慣(一鍵四連)📝
  • 🎉歡迎關注💗一起學習👍一起討論??一起進步📝
  • 🙏作者水平有限,歡迎各位大佬指點,相互學習進步!😆

?

一、HTTP請求方法

二、冪等性

2.1、HTTP GET方法

2.2、HTTP POST方法

2.3、HTTP PUT方法

2.4、HTTP PATCH方法

2.5、HTTP DELETE方法

三、如何設計符合冪等性的高質量RESTful API

3.1、GET? vs POST

3.2、POST vs PUT

3.3、PUT vs PATCH


一、HTTP請求方法

根據HTTP標準,HTTP請求可以使用多種請求方式。
GET POST HEAD OPTIONS PUT PATCH DELETE TRACE CONNECT

indexmethoddescription
1GET請求指定頁面信息,并返回實體主體
2HEAD類似于GET請求,只不過返回的響應中沒有具體的內容,用于獲取報頭
3POST向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
4PUT從客戶端向服務器傳送的數據取代指定的文檔的內容。(全部取代)
5PATCH從客戶端向服務器傳送的數據取代指定的文檔的內容。(部分取代)
6DELETE請求服務器刪除指定的頁面。
7CONNECTHTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。
8OPTIONS允許客戶端查看服務器的性能。
9TRACE回顯服務器收到的請求,主要用于測試或診斷。

說完了HTTP請求方法的大致介紹,我們一起來理解一下什么是HTTP請求方法的冪等性。

二、冪等性

HTTP冪等方法,是指無論調用這個url多少次,都不會有不同的結果的HTTP方法。也就是不管你調用1次還是調用100次,1000次,結果都是一樣的(前提是服務器端的數據沒有被人為手動更改。比如說,你數據庫中的數據被手動更改過,那兩次調用的結果肯定是變化的)。

我們下面就探討一下 GET POST PUT PATCH DELETE 的冪等性。

GET /tickets # 獲取ticket列表
GET /tickets/12 # 查看某個具體的ticket
POST /tickets # 新建一個ticket
PUT /tickets/12 # 更新ticket 12
PATCH /tickets/12 # 更新ticket 12
DELETE /tickets/12 # 刪除ticekt 12

2.1、HTTP GET方法

HTTP GET方法,用于獲取資源,不管調用多少次接口,結果都不會改變,所以是冪等的。

GET /tickets # 獲取ticket列表
GET /tickets/12 # 查看某個具體的ticket

只是查詢數據,不會影響到資源的變化,因此我們認為它冪等。
值得注意,冪等性指的是作用于結果而非資源本身。怎么理解呢?例如,這個HTTP GET方法可能會每次得到不同的返回內容,但并不影響資源。
可能你會問有這種情況么?當然有咯。例如,我們有一個接口獲取當前時間,我們就應該設計成

GET /service_time # 獲取服務器當前時間

它本身不會對資源本身產生影響,因此滿足冪等性。

2.2、HTTP POST方法

HTTP POST方法是一個非冪等方法,因為調用多次,都將產生新的資源

POST /tickets # 新建一個ticket

因為它會對資源本身產生影響,每次調用都會有新的資源產生,因此不滿足冪等性。

2.3、HTTP PUT方法

HTTP PUT方法是不是冪等的呢?我們來看下

PUT /tickets/12 # 更新ticket 12

因為它直接把實體部分的數據替換到服務器的資源,我們多次調用它,只會產生一次影響,但是有相同結果的 HTTP 方法,所以滿足冪等性。

2.4、HTTP PATCH方法

HTTP PATCH方法是非冪等的。HTTP POST方法和HTTP PUT方法可能比較好理解,但是HTTP PATCH方法只是更新部分資源,怎么是非冪等的呢?
因為,PATCH提供的實體則需要根據程序或其它協議的定義,解析后在服務器上執行,以此來修改服務器上的資源。換句話說,PATCH請求是會執行某個程序的,如果重復提交,程序可能執行多次,對服務器上的資源就可能造成額外的影響,這就可以解釋它為什么是非冪等的了。
可能你還不能理解這點。我們舉個例子

PATCH /tickets/12 # 更新ticket 12

此時,我們服務端對方法的處理是,當調用一次方法,更新部分字段,將這條ticket記錄的操作記錄加一,這次,每次調用的資源是不是變了呢,所以它是有可能是非冪等的操作。

2.5、HTTP DELETE方法

HTTP DELETE方法用于刪除資源,會將資源刪除。

DELETE /tickets/12 # 刪除ticekt 12

調用一次和多次對資源產生影響是相同的,所以也滿足冪等性。

三、如何設計符合冪等性的高質量RESTful API

3.1、GET? vs POST

也許,你會想起一個面試題。

HTTP請求的GET與POST方式有什么區別?你可能會回答到:GET方式通過URL提交數據,數據在URL中可以看到;POST方式,數據放置在HTML HEADER內提交。但是,我們現在從RESTful的資源角度來看待問題,HTTP GET方法是冪等的,所以它適合作為查詢操作,HTTP POST方法是非冪等的,所以用來表示新增操作。

但是,也有例外,我們有的時候可能需要把查詢方法改造成HTTP POST方法。比如,超長(1k)的GET URL使用POST方法來替代,因為GET受到URL長度的限制。雖然,它不符合冪等性,但是它是一種折中的方案。

3.2、POST vs PUT

對于HTTP POST方法和TTP PUT方法,我們一般的理解是POST表示創建資源,PUT表示更新資源。當然,這個是正確的理解。


但是,實際上,兩個方法都用于創建資源,更為本質的差別是在冪等性。HTTP POST方法是非冪等,所以用來表示創建資源,HTTP PUT方法是冪等的,因此表示更新資源更加貼切。

3.3、PUT vs PATCH

此時,你看會有另外一個問題。HTTP PUT方法和HTTP PATCH方法,都是用來表述更新資源,它們之間有什么區別呢?我們一般的理解是PUT表示更新全部資源,PATCH表示更新部分資源。首先,這個是我們遵守的第一準則。根據上面的描述,PATCH方法是非冪等的,因此我們在設計我們服務端的RESTful API的時候,也需要考慮。如果,我們想要明確的告訴調用者我們的資源是冪等的,我的設計更傾向于使用HTTP PUT方法。

總結

以上是生活随笔為你收集整理的HTTP请求方法及幂等性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。