REST DELETE with payload

时间:2015-02-24 16:10:22

标签: rest

http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-14#page-20表示:

  

DELETE请求上的实体没有定义的语义。请注意发送   DELETE请求的主体可能会导致一些现有的实现   拒绝请求。

这当然有道理。

但我们的情况是,当客户删除他购买的服务时,需要创建交互记录,以便通知CRM,例如可以试图赢回客户。

当用户删除服务时,他/她可以输入需要存储在交互中的自由格式原因。

我们只是将此原因文本作为正文有效负载传递给DELETE服务调用。

由于进行了一些讨论,我们想知道这在语义上是否正确,或者其他人如何实现这一点。

注意:我们不希望将原因文本作为查询字符串发送,理论上这可能会很长。

1 个答案:

答案 0 :(得分:0)

由于你提到的DELETE具有比HTTP规范中指定的语义更多的语义(即它影响(创建)另一个资源),我使用另一个资源,例如: DeleteRequest,其中包含以下内容:

{
  "resource_href": "http://some/resource/to/delete",
  "reason": {
    "source": "customer request",
    "msg": "I'm really not satisfied with the quality of your service"
  }
}

会影响取消购买(或者只是改变它的状态?)并通知CRM - 当然还可以为例如创建DeleteRequest资源。后来的CRM监控。

在更复杂的系统中,让对象保持(作为不可变的)并以某种方式将其标记为"隐形"通常是更好的主意。而不是永久删除它,没有任何痕迹。

更新:事实上,DELETE当前的HTTP规范more directly points out并不一定意味着删除资源,这符合我对DELETE&会很少见的。尽管消息体语义的OP引用仍然存在。