我对Web API中的客户资源进行了DELETE操作。 URI将类似于 / customer / 1000 / 。此操作将由系统在内部停用客户。
在某些情况下,由于客户欠公司付款,客户无法取消。
如果取消成功,则API返回200.如果由于待付款而取消,API应该返回什么?我可以返回200但消息对象作为带错误的响应吗?
答案 0 :(得分:7)
如果您无法完成请求,则命令将返回适当的状态代码。由于客户端有故障并且可以纠正状态,因此4xx级代码似乎合适。来自RFC 7231, section 6.5:
状态代码的4xx(客户端错误)类表示客户端似乎有错误。
我认为,有三个适用的代码:
400在定义上有点宽泛,并且已经转变(至少这是我的印象)为全能状态。因此,如果您不确定,400几乎总是一个安全的赌注。
此状态通常链接到HTTP身份验证框架。不公正的。来自RFC:
403(禁止)状态代码表示服务器理解请求但拒绝授权。
[...]可能会因与凭证无关的原因而禁止请求。
在这种情况下,这将有点延伸,但并非完全不合理。
409(冲突)状态代码表示由于与目标资源的当前状态冲突而无法完成请求。此代码用于用户可能能够解决冲突并重新提交请求的情况。
恕我直言,这是一个选择。 RFC提到PUT
动词,但避免严格链接409。
答案 1 :(得分:-1)
技术上,是的。有关web api错误消息的真正好建议,请参阅此帖子Best practice to return errors in ASP.NET Web API。
我倾向于避免为不成功的操作返回任何2XX,但这是个人偏好,因为这些事情没有明确的规则。我认为在某些情况下,最终用户可能会因为不成功而混淆。同样地,我避免使用5XX,因为这会给人一种内部错误的印象,或者他们应该重新提交。
这里有一个论坛帖子是相关的,并提出了一些好处:https://groups.google.com/forum/#!topic/api-craft/_dfnBKImNCI 在上面的帖子中建议使用带有自定义错误代码和消息的403是我在这种情况下建议的,因为它似乎是最接近的。
希望有所帮助:)