2011-12-14 85 views

回答

13

POST和PUT都可用於在不同情況下創建和更新操作。那麼PUT和POST之間的區別究竟是什麼? 簡而言之:當且僅當您知道資源將存活的URL以及資源的全部內容時,才使用PUT。否則,使用POST。

POST是一個令人難以置信的一般動詞。因爲它既不保證安全性也不具有冪等性,並且它在RFC中有相對寬鬆的描述,所以你可以將它用於任何事情。事實上,你可以讓所有的請求POST請求,因爲POST幾乎沒有承諾;它可以表現得像一個GET,一個PUT或一個DELETE,如果它想的話。它還可以做一些其他動詞無法做到的事情 - 它可以在與HTTP請求中的URL不同的URL上創建新資源;它可以在不改變整個事物的情況下修改資源的一部分(儘管提議但未廣泛接受的PATCH方法可以做類似的事情)。

PUT是一個更嚴格的動詞。它需要一個完整的資源並將其存儲在給定的URL中。如果之前有資源,它就會被替換;如果不是,則創建一個新的。這些屬性支持idempotence,這是一個天真的創建或更新操作可能不會。我懷疑這可能是爲什麼PUT被定義的原因;它是一種冪等操作,允許客戶端向服務器發送信息。

參考文獻:

  • RFC 2616 - HTTP 1.1
  • RFC 5789 - 用於HTTP
  • PATCH方法
  • Martin Fowler的,理查森成熟度模型
1

您可以發送請求主體以同樣的方式,它只是你的應用程序代碼的處理不同...

POST動詞傳統上用於創建資源

PUT動詞傳統上用於更新資源

+1

有趣的是,我讀過POST用於更新和PUT用於創建,例如在這裏接受的答案http://stackoverflow.com/questions/630453/put-vs-post-in-rest – DexCurl 2011-12-14 17:12:36

+1

這實際上是一個常規問題而不是標準問題,我不會依賴於在這裏找到一個「接受」的答案作爲** any **的具體證據...... http://stackoverflow.com/a/2447740/555384。 ..如果我是你,我會細讀一些受歡迎的Restful apis,看看他們是如何做到的......我認爲你會發現這個答案是最常被接受的。 – jondavidjohn 2011-12-14 17:23:02

2

從HTTP的角度來看,請求格式是相同的。

0

PUT上傳的新資源服務器。如果資源已經存在並且不同,它將被替換;如果它不存在,則創建它。

POST觸發服務器上的操作。它有副作用,可用於觸發訂單,修改數據庫,在論壇發佈消息或其他操作。