说我想做DELETE /groups/20
,并且我的业务规则声明只要有成员就不能删除组。
200
或204
404
401
。403
在那种情况下你会回报什么? 400
?但语法完美形成。 403
?嗯,是的,这是禁止的,但403
通常意味着,“你无权执行此行动”,而不是“你有权利” ,但有些先决条件没有得到满足,照顾好后再回来。“
答案 0 :(得分:1)
如果用户能够通过删除成员并尝试再次删除该组来更正请求,则应返回409 Conflict
。 RFC 7231说:
409(冲突)状态代码表示由于与目标资源的当前状态冲突而无法完成请求。此代码用于用户可能能够解决冲突并重新提交请求的情况。服务器应该生成一个有效负载,其中包含足够的信息,供用户识别冲突源。
你在评论中说409 Conflict
似乎更多的是保留用于双重创造的东西,但是"似乎保留"几乎是矛盾的。如果保留某些内容,RFC通常会非常明确,并使用关键字MUST。 RFC 7231提到了由于PUT请求引起的冲突编辑的情况,这是更常见的情况,但没有说明状态代码是保留的。
最有可能发生冲突以响应PUT请求。例如,如果正在使用版本控制并且包含PUT的表示更改为与早期(第三方)请求所产生的资源冲突的资源,则源服务器可能会使用409响应来指示它不能完成请求。在这种情况下,响应表示可能包含有助于根据修订历史合并差异的信息。