RESTful删除策略

时间:2009-02-04 17:04:21

标签: rest

假设我有一个资源,当调用delete时可以有两种不同的行为

  1. 资源已删除。
  2. 资源被移动到回收站。
  3. 如何以符合REST的方式对其进行建模?

    我想到了以下解决方案:

    DELETE /myresource     
    

    将资源移动到回收站(默认行为)

    DELETE /myresource?force-delete=true  
    

    强制删除资源。

    这是否符合REST标准?我在调用DELETE时从未见过URL中的查询参数,是吗?

5 个答案:

答案 0 :(得分:11)

您的想法很好,但我认为自定义请求标头会更合适一些。查询参数更适合参数。

自定义请求标头看起来像这样:

DELETE /myresource
X-Really-Delete: Yup

答案 1 :(得分:4)

纯REST策略应该更喜欢不变化的资源。在我看来,你不是通过附加一个参数来改变资源,所以对我来说这听起来是个好策略。

如果您要执行相同的操作:

DELETE /myresource.force

这将像另一个资源一样,这不是最佳的。

答案 2 :(得分:2)

为什么不呢?您已经传递了一个参数来识别哪个资源,因此请发送另一个参数以建立不同的操作过程。 IMO,完全是RESTful。

答案 3 :(得分:2)

您还可以将2.作为POST请求而不是DELETE实现。

POST /myresource

recycle-bin=true...

正如您正在做的一样是更新资源以指示它在回收站中。

编辑:将方法从PUT更改为POST,因为PUT必须包含资源的完整替代(或添加),而在此明确我们只是更新资源的一部分。

答案 4 :(得分:2)

DELETE应删除该项目,不会提出任何问题。

可悲的是,HTTP中没有“MOVE”请求。 POST通常用于创建内容,PUT是更多修改。

所以我建议你使用某种形式的元数据或PUT /myresource的json字符串来执行类似{ "recycle":"true" }的操作,以表示您想要“回收”它。