假设我有一个资源,当调用delete时可以有两种不同的行为
如何以符合REST的方式对其进行建模?
我想到了以下解决方案:
DELETE /myresource
将资源移动到回收站(默认行为)
DELETE /myresource?force-delete=true
强制删除资源。
这是否符合REST标准?我在调用DELETE时从未见过URL中的查询参数,是吗?
答案 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" }
的操作,以表示您想要“回收”它。