http post put patch 總結

idempotent 冪等的

如果一個方法重複執行多次,產生的效果是一樣的,那就是idempotent的;
idempotent的意思是如果相同的操作再執行第二遍第三遍,結果還是一樣。
"Methods can also have the property of 'idempotence' in that (aside from error
or expiration issues) the side-effects of N > 0 identical requests is the same
as for a single request."

POST 方法

用來創建一個子資源,如 /api/users,會在users下面創建一個user,如users/1;
POST方法不是冪等的,多次執行,將導致多條相同的用戶被創建(users/1,users/2 ...
而這些用戶除了自增長id外有着相同的數據,除非你的系統實現了額外的數據唯一性檢查)

PUT 方法

PUT比較正確的定義是 Replace (Create or Update),
例如 PUT /items/1 的意思是替換 /items/1 ,如果已經存在就替換,沒有就新增;
因此,PUT方法一般會用來更新一個已知資源,除非在創建前,你完全知道自己要創建的對象的URI

http post put 區別

**在HTTP中,PUT被定義爲idempotent的方法,POST則不是,這是一個很重要的區別

舉個栗子:

POST /api/articles
PUT /gists/:id/stars
如果產生兩個**資源**,就說明這個服務不是idempotent(冪等的),因爲多次使用產生了副作用;
如果後一個請求把第一個請求**覆蓋**掉了,那這個服務就是idempotent的。
前一種情況,應該使用POST方法;
後一種情況,應該使用PUT方法。

PATCH 方法

PATCH方法是新引入的,是對PUT方法的補充,用來對已知資源進行**局部更新**
HTTP PATCH method require a feature to do partial resource modification.
The existing HTTP PUT method only allows a complete replacement of a document.

需要注意的地方

**語義** 而非 風格;是語義的問題,換句話說:
也就是這取決於這個REST服務的行爲是否是idempotent(冪等的)
// 但是這個只是在語義上,同時不要太苛求語義
DELETE 刪除,無論如何 資源 最後都將不復存在
// PUT    替換(新增或完整更新)
// PATCH  部分更新

Examples from github api v3

create a gist
POST /gists

star a gist
PUT /gists/:id/stars

設計 restful api 需要注意的問題

**名詞複數**

URIs

names > verbs : 推薦使用具象化的名詞而不是動詞

plural > singular

Resource collections: /v1/users
Resource instances:   /v1/users/007

ps: 文章裏的內容是我在平時的學習過程中算是摘錄吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章