原文連接:http://yifei.me/note/540瀏覽器
HTTP 中經常使用的方法有 GET/POST/PUT/DELETE 等,在設計API或者表單的時候咱們須要選擇合適的方法。通常有兩種方案:緩存
爲了探討兩種方案,首先咱們來看一下 URL 的設計。URL 是 Universal Resource Locator 的縮寫,也就是一個 URL 表示的是惟一的一個資源,因此這個資源的 id 或者說主鍵應該是放在 URL 路徑中的。服務器
好比一個好的設計:post
http://example.com/post/1234
很差的設計google
http://example.com/post?id=1234
而控制這個資源展現方式的其餘字段能夠做爲參數:url
http://exmaple.com/post/1234?lang=zh&utm_source=google
好多人對於 http 方法的理解是 GET 是參數在url裏,而POST是參數在 body 裏面,這樣理解是不對的。設計
在上述的兩種方案中,GET 都是用來讀取資源的,通常來講不要對資源進行任何更新操做,也就是沒有反作用。好比說code
很差的設計:資源
GET http://example.com/post/1234?action=delete
上面的設計意圖經過GET操做來刪除一個資源,這樣很是很差。好比說若是瀏覽器具備預緩存頁面的功能,那麼預先讀取這個連接的時候就把對應的資源刪掉了。get
通常來講,GET 方法還要求冪等性,也就是不管多少次操做,最終結果和操做一次都是同樣的。GET 操做的參數受到 url 長度的限制,當參數超過 1k 的時候,可使用 POST 代替。不過這時候你首先應該想一下這麼多參數是否是都有用,是否是設計有問題。
POST 方法能夠用來建立資源,好比說:
POST http://example.com/post/ content=xxxxxxx&author=xxxx&date=xxxx
POST 操做具備反作用,也就是說會更改服務器上的狀態。另外 POST 操做通常不是冪等的,每次 POST 操做都應該建立一個新的資源。
PUT 操做用來更新資源,也是冪等的。
PUT http://example.com/post/1234 content=yyyyyy
DELETE 用來刪除資源,值得注意的是,根據規範 DELETE 方法不能帶有 body。
DELETE http://example.com/post/1234