我对web api中的客户资源执行了删除操作。uri看起来像/customer/1000/。此操作将在系统内部停用客户。
在有些情况下,客户不能被取消,因为他拥有企业的付款。
如果取消成功,api返回200。如果由于等待付款而取消失败,api应该返回什么?我还能返回200个消息对象作为错误的响应吗?

最佳答案

如果无法完成请求,则必须返回适当的状态代码。由于客户机有错误并且可以纠正状态,4xx类代码似乎是合适的。从RFC 7231, section 6.5
状态代码的4xx(客户端错误)类指示客户端似乎出错。
在我看来,有三个适用的代码:
400/Bad Request
400在定义上有点宽泛,已经变成了一个全面的状态(至少这是我的印象)。所以如果你不确定,400几乎总是一个安全的赌注。
403/Forbidden
此状态通常链接到http身份验证框架。这样做是不公正的。来自RFC:
403(禁止)状态代码表示服务器理解该请求,但拒绝对其进行授权。
[…]请求可能因与凭据无关的原因而被禁止。
在这种情况下,这将是一个有点伸展,但并非完全不合理。
409/Conflict
409(冲突)状态代码表示由于与目标资源的当前状态冲突,无法完成请求。此代码用于用户可能能够解决冲突并重新提交请求的情况。
嗯,这是要挑的。rfc提到了PUT动词,但避免将409与之严格联系起来。

10-04 22:15
查看更多