想要得到你的意见,可能没有一个绝对正确的答案,但我想看看你认为更正确的方法。
如果请求没有结构上的错误(格式正确)并且所有字段都有效(字段值不太长,必填字段有值等等)但是由于业务原因呼叫失败,例如“你不能改变未分配给你的任务的状态”,在这种情况下应该是什么响应:
{ error: { code :120, message: "you cannot change a status of a task that isn't assigned to you" } }
{ error: { code :120, message: "you cannot change a status of a task that isn't assigned to you" } }
答案 0 :(得分:4)
虽然我想同意@EJK,但他链接的规范已经过时了。
最新版本是RFC7231:http://tools.ietf.org/html/rfc7231#section-6.5.1,它改变了旧 403 FORBIDDEN
响应状态的含义。
<强>答案:强>
因此,为了这个问题,400 BadRequest
应该被使用,因为无论谁使用你的服务,案件是客户,都是错误的,并且可以修复他的请求
400(错误请求)状态代码表示服务器不能或 不会因为被认为是某些事情而处理请求 客户端错误(例如,格式错误的请求语法,无效请求 消息框架或欺骗性请求路由)。
来自您自己的用例的示例:
客户现在知道错误"you cannot change a status of a task that isn't assigned to you"
是他自己的错。他甚至可能会尝试发出不同的新(有效)请求。
答案 1 :(得分:2)
403 Forbidden似乎是一场很好的比赛。
来自http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4。
服务器理解请求,但拒绝履行请求。 授权无效,请求不应重复。如果 请求方法不是HEAD,服务器希望公开 为什么请求没有得到满足,它应该描述原因 因为该实体的拒绝。如果服务器不想做 此信息可供客户使用,状态代码404(不是 找到了)可以代替使用。
因此,正如您所提议的那样,选项2似乎很好,因为它也描述了失败的原因。