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 路徑中的。

比如一個好的設計:

http://example.com/post/1234

不好的設計

http://example.com/post?id=1234

而控制這個資源展示方式的其他字段可以作為參數:

http://exmaple.com/post/1234?lang=zh&utm_source=google

HTTP 方法的含義

好多人對於 http 方法的理解是 GET 是參數在url里,而POST是參數在 body 里面,這樣理解是不對的。

在上述的兩種方案中,GET 都是用來讀取資源的,一般來說不要對資源進行任何更新操作,也就是沒有副作用。比如說

不好的設計:

GET http://example.com/post/1234?action=delete

上面的設計意圖通過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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM