比方說,我有一個可以有兩種不同的行爲刪除時,被稱爲的RESTful刪除策略
- 資源被刪除的資源。
- 資源被移到回收站。
如何以REST兼容的方式對其進行建模?
我想到了以下解決方案:
DELETE /myresource
移動資源回收站(默認行爲)
DELETE /myresource?force-delete=true
力上的資源刪除。
是否符合REST?調用DELETE時,我從來沒有在URL中看到過查詢參數,是嗎?
比方說,我有一個可以有兩種不同的行爲刪除時,被稱爲的RESTful刪除策略
如何以REST兼容的方式對其進行建模?
我想到了以下解決方案:
DELETE /myresource
移動資源回收站(默認行爲)
DELETE /myresource?force-delete=true
力上的資源刪除。
是否符合REST?調用DELETE時,我從來沒有在URL中看到過查詢參數,是嗎?
純粹的REST策略應該更喜歡不變化的資源。在我看來,你不會通過追加一個參數來改變資源,所以對我來說這聽起來很不錯。
如果你是像這樣執行相同的操作:
DELETE /myresource.force
會像其他資源,這將不是最優的。
爲什麼不呢?您已經傳遞了一個參數來確定哪個資源,因此請發送另一個參數來建立不同的操作過程。國際海事組織,這是完全RESTful。
你的想法很好,但我認爲自定義請求標題會更合適一些。查詢參數更適合參數。
自定義請求頭會是這個樣子:
DELETE /myresource
X-Really-Delete: Yup
你也可以實現2.作爲一個POST請求,而不是DELETE。
POST /myresource
recycle-bin=true...
由於在所有你正在做的是更新資源,以表明它在回收站。
編輯:改變方法,從PUT
到POST
給予PUT
必須用資源的完全更換(或增加),而這裏顯然我們只更新資源的一部分。
刪除應刪除該項目,不問任何問題。
不幸的是,HTTP中沒有'MOVE'請求。 POST通常用於創建內容,PUT是更多修改。
所以我建議你做一些類似PUT /myresource
的某種形式的元數據或json字符串沿着{ "recycle":"true" }
的行來表示你想「回收」它。
這打破了REST的'規則',因爲你正在處理不同的資源。與此同時,/ myresource.json和/myresource.xml也提供了不同格式的相同數據(使用您的接受頭文件,人員!),但這不會很快消失。 – 2011-08-17 03:06:02
這不是'REST',你正在以RPC的方式進行操作。 – thecoshman 2013-06-27 15:20:25