我的问题是关于 HTTP 状态代码的一个非常通用的问题,当DELETE在资源上是不可能的(但不考虑用户的权利)。
我们对某种类型的资源有一个 RESTful API。
The DELETE方法已在资源上获得授权,但在某些情况下无法删除资源(如果有数据绑定到该资源)。
在这种情况下返回给客户端的正确 HTTP 状态代码是什么?
以下是我收集的一些可能性以及为什么它在我的情况下似乎不合适:
-
403 (禁止) : 似乎主要与用户权限有关。
-
405 (不允许的方法) :似乎 API 并非设计用于响应此类资源的此方法。
-
409 (Conflict) :看起来合适,但客户端应该有可能解决与 API 的冲突,但这里的情况并非如此。
Update :无法通过 REST API 更改阻止删除资源的数据绑定。然而,资源可以通过其他方式“释放”,因为数据来源的数据库也可以被其他应用程序访问,这些应用程序可能会更改资源的状态(数据库中的 SQL DELETE 始终可以做到这一点)。
我认为 409 是最合适的,因为它在 RFC 中的措辞如下:
409(冲突)状态码表示请求无法
完成由于与目标的当前状态冲突
资源。该代码用于用户的情况might是
能够解决冲突并重新提交请求。服务器
应生成包含足够用户信息的有效负载
认识冲突的根源。
(强调我的)
根据我对问题描述的理解,不允许 DELETE 的原因正是与目标资源的当前状态冲突。如 RFC 中所示,响应有效负载可以给出原因的指示,并且,可选地, 用户might能够解决它。我在规范中没有看到任何使 409 不合适的内容,只是因为 API 不提供冲突解决的可能性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)