2016-12-04 101 views
1

能否請您確認,如果低於實施PUT VS POST違背了REST原則:REST原則 - 資源更新


如果資源是通過POST創建,允許更新通過POST資源(否則返回412錯誤) 如果資源是通過PUT創建,允許更新通過PUT資源(否則返回412錯誤)


我瞭解雙方PUT和POST可以用來創建資源。我認爲在這種情況下是不對的是依賴於如何創建資源(PUT/POST)並基於它進行操作。你能把我指向RFC嗎?

+1

一般而言,您可以使用其中任何一種,但標準爲:POST用於創建新資源,PUT用於替換目標資源的所有當前表示,PATCH用於更新目標資源的某些部分。 –

回答

0

RESTful URL通常指向collectionelement

collection通常表示爲複數,可能看起來像這樣: https://www.example.com/api/v1/cars

element通常不客氣其標識符和可能看起來像這樣: https://www.example.com/api/v1/cars/17

Collection可以均是孩子element s:

<code>https://www.example.com/api/v1/workplaces/22/rooms</code> 

做一個POSTcollection通常意味着在collection中創建element,而新的element通常返回響應。服務器將負責爲新創建的元素創建URI。推薦使用「RESTful」方式創建element s。

POST設置爲element並不經常使用(也不鼓勵),因爲這意味着客戶端將是分配identifier的客戶端。如果經常使用,則意味着您將element本身視爲collection,並在其中創建一個新的element

做一個PUTcollection是完全合法的「RESTfulness」,但通常意味着更換整個collection

做一個PUTelement是常見的,通常是指更換整個element,這意味着整個element應沿着在請求體傳遞。有些人認爲,如果element不存在(如果它不存在,那麼它會被創建)(但我會認爲這是一個錯誤的請求)。

PATCHelement通常意味着更新element。應更新的字段是請求正文中唯一必需的字段。

我從未偶然做過PATCHcollection,並可能會推薦它。

2

如果資源是通過POST創建,允許更新通過POST資源(否則返回412錯誤) 如果資源是通過PUT創建,允許更新通過PUT資源(否則返回412錯誤)


能否請您確認,如果低於實施PUT VS POST違抗REST原則

這也可能是錯的,但不一定如此。

特別地,在PUT HTTP具有非常特定語義

目標資源的狀態來創建或與由封閉在所述請求消息的有效載荷表示所定義的狀態替換的PUT方法請求。

換句話說,PUT適合替換,但不適合修改。

因此,您的準則實際上暗示的是,如果您通過PUT的表示創建資源,則對該資源的所有後續更改也必須是完整的替換。

這對我來說並不明顯,這是一個好主意,並且HTTP中沒有任何內容要求您如此嚴格;但是您的指南作者肯定有可能會遇到一些不好的經歷,這些經歷可能與這些指南適用的環境有關。

關於使用412響應的注意事項是......很奇怪。再次,在HTTP中,412具有非常具體的含義;而且這個含義與請求中使用的方法無關。使用條件請求來確保您的編輯與另一個不衝突是個好主意。

但是,如果有人已經做了POST,他們應該做PUT,反之亦然,那麼在這種情況下返回的正確的狀態碼是405

405(方法不允許)狀態碼指示請求行中接收到的方法爲源服務器已知,但目標資源不支持。原始服務器必須在包含目標資源當前支持的方法列表的405響應中生成允許標頭字段。

你能指點我的RFC嗎?

REST沒有「RFC」;從這個意義上說,這不是一個標準。 REST只是Roy T. Fielding在早期的Web標準化過程中發現的一組架構約束。菲爾丁論文的適當參考文獻是Chapter 5

HTTP作爲標準(大部分)使用滿足REST約束的體系結構。截至2016年底,該標準由RFC 7230-7235包括在內。