2009-02-04 61 views
11

比方說,我有一個可以有兩種不同的行爲刪除時,被稱爲的RESTful刪除策略

  1. 資源被刪除的資源。
  2. 資源被移到回收站。

如何以REST兼容的方式對其進行建模?

我想到了以下解決方案:

DELETE /myresource  

移動資源回收站(默認行爲)

DELETE /myresource?force-delete=true 

力上的資源刪除。

是否符合REST?調用DELETE時,我從來沒有在URL中看到過查詢參數,是嗎?

回答

4

純粹的REST策略應該更喜歡不變化的資源。在我看來,你不會通過追加一個參數來改變資源,所以對我來說這聽起來很不錯。

如果你是像這樣執行相同的操作:

DELETE /myresource.force 

會像其他資源,這將不是最優的。

+2

這打破了REST的'規則',因爲你正在處理不同的資源。與此同時,/ myresource.json和/myresource.xml也提供了不同格式的相同數據(使用您的接受頭文件,人員!),但這不會很快消失。 – 2011-08-17 03:06:02

+0

這不是'REST',你正在以RPC的方式進行操作。 – thecoshman 2013-06-27 15:20:25

2

爲什麼不呢?您已經傳遞了一個參數來確定哪個資源,因此請發送另一個參數來建立不同的操作過程。國際海事組織,這是完全RESTful。

11

你的想法很好,但我認爲自定義請求標題會更合適一些。查詢參數更適合參數。

自定義請求頭會是這個樣子:

DELETE /myresource 
X-Really-Delete: Yup 
2

你也可以實現2.作爲一個POST請求,而不是DELETE。

POST /myresource 

recycle-bin=true... 

由於在所有你正在做的是更新資源,以表明它在回收站。

編輯:改變方法,從PUTPOST給予PUT必須用資源的完全更換(或增加),而這裏顯然我們只更新資源的一部分。

2

刪除應刪除該項目,不問任何問題。

不幸的是,HTTP中沒有'MOVE'請求。 POST通常用於創建內容,PUT是更多修改。

所以我建議你做一些類似PUT /myresource的某種形式的元數據或json字符串沿着{ "recycle":"true" }的行來表示你想「回收」它。