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: 文章裏的內容是我在平時的學習過程中算是摘錄吧