Get 和 Post 方法的選擇和URL的設計

原文連接:http://yifei.me/note/540瀏覽器

HTTP 中經常使用的方法有 GET/POST/PUT/DELETE 等,在設計API或者表單的時候咱們須要選擇合適的方法。通常有兩種方案:緩存

  1. 只使用 GET 和 POST,GET 主要用來讀取數據,POST 用來建立或者更新數據。
  2. RESTful的方法,GET/POST/PUT/DELETE 分別用來增刪改查。

URL 的設計

爲了探討兩種方案,首先咱們來看一下 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 方法的含義

好多人對於 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
相關文章
相關標籤/搜索