DELETE的相应http响应代码是什么依赖于其他东西?

时间:2014-11-02 10:38:06

标签: rest

说我想做DELETE /groups/20,并且我的业务规则声明只要有成员就不能删除组。

  • 如果DELETE成功,我会返回200204
  • 如果第20组不存在,我会返回404
  • 如果用户未通过身份验证,我将返回401
  • 如果用户已通过身份验证但对第20组没有权限,我将返回403
  • 如果存在第20组,则用户已通过身份验证,请求正常,但您不能删除第20组,因为它包含成员?

在那种情况下你会回报什么? 400?但语法完美形成。 403?嗯,是的,这是禁止的,但403通常意味着,“无权执行此行动”,而不是“你有权利” ,但有些先决条件没有得到满足,照顾好后再回来。“

1 个答案:

答案 0 :(得分:1)

如果用户能够通过删除成员并尝试再次删除该组来更正请求,则应返回409 ConflictRFC 7231说:

  

409(冲突)状态代码表示由于与目标资源的当前状态冲突而无法完成请求。此代码用于用户可能能够解决冲突并重新提交请求的情况。服务器应该生成一个有效负载,其中包含足够的信息,供用户识别冲突源。

你在评论中说409 Conflict似乎更多的是保留用于双重创造的东西,但是"似乎保留"几乎是矛盾的。如果保留某些内容,RFC通常会非常明确,并使用关键字MUST。 RFC 7231提到了由于PUT请求引起的冲突编辑的情况,这是更常见的情况,但没有说明状态代码是保留的。

  

最有可能发生冲突以响应PUT请求。例如,如果正在使用版本控制并且包含PUT的表示更改为与早期(第三方)请求所产生的资源冲突的资源,则源服务器可能会使用409响应来指示它不能完成请求。在这种情况下,响应表示可能包含有助于根据修订历史合并差异的信息。