我的设想是,我正在建模“你确定要删除它吗?”场景。在某些情况下,资源的状态表明请求的删除可能无效。您可以自己想象一些需要确认删除的场景
我们采用的解决方案是向 delete 请求传递一个参数,以指示继续执行 delete (”?Force _ delete = true”)
例如:。
DELETE http://server/resource/id?force_delete=true
我相信它仍然是宁静的,因为:
(a) DELETE 的语义没有改变-用户仍然可以发送一个普通的 DELETE 请求,但是这个带有409和响应主体的 可能会失败将解释原因。我说可能失败是因为(由于不值得解释的原因)在某些情况下没有理由提示用户。
(b) Roy 的论文中没有任何内容表明它违背了 REST 的精神——既然 HTTP 只是 REST 的一个实现,那么传递 HTTP 参数又有什么关系呢
有没有人能给我一个明确的声明,说明为什么这不是 RESTful?
关于一个相关的问题,如果用户没有指定 force _ delete,那么我将返回 409 Conflict
-这是最合适的响应代码吗?
经过进一步的研究,我认为在 DELETE 中添加参数可能会违反几个原则。
首先,实现可能违反了“统一接口”(参见 Roy 的论文的5.1.5节)
通过添加“ force _ DELETE”,我们在已经定义好的 DELETE 方法上添加了一个额外的约束。这种约束只对我们有意义。
您还可以认为它违反了“5.1.2 Client-Server”,因为确认对话实际上是一个 UI 问题,而且并非所有客户端都希望确认删除。
有人有建议吗?