我应该使用哪个HTTP状态码来表示自定义错误?

5

我需要返回关于错误的信息,例如:客户不能有超过3个联系人职位字段为空操作限制已超出

我需要为每个错误发送自己的状态码吗?
对于所有这些错误,我可以使用 400 BadRequest 吗?

4个回答

7
我能用400 BadRequest来处理所有这些错误吗?
非常可以。
以前有些问题,因为RFC 2616将400 Bad Request定义为:
由于语法错误,服务器无法理解请求。客户端不应重复发送未经修改的请求。
然而,通常没有更适用的状态码,所以它经常被用作最佳匹配。
随着RFC 7231废除RFC 2616并对400进行更广泛的定义,情况已经改变:
400(错误请求)状态代码表示服务器由于被认为是客户端错误的某些原因(例如,格式不正确的请求语法、无效的请求消息框架或欺骗性的请求路由)而无法或不会处理请求。
因为“被认为是客户端错误的某些原因”涵盖了多种罪恶,所以现在更明确地适用。
当然,如果另一个4xx代码更匹配(例如,404针对与不存在的东西相关的请求[消息中的ID找不到匹配项]),那么它是更好的选项。

1

我可以使用BadRequest (400)来处理所有这些错误吗?

是的,这绝对是这种验证错误的正确状态码。


一般情况下,HTTP状态码为400;如果想要更加具体的描述,可以考虑使用422(参见http://greenbytes.de/tech/webdav/rfc4918.html#STATUS_422)。 - Julian Reschke
我想知道当“操作限制已超过”时,如何使用“400 Bad Request”... - Opal

0
我能用BadRequest(400)来表示所有这些错误吗?
状态码400 Bad Request用于指示与请求语法相关的错误。例如,有一个类型为String的字段,但传递了一个Integer。或者有一个类型为String的字段,它接受一组预定义值(枚举),但传递了另一个字符串。有一个字段缺失。字段不能为空。
因此,如果字段缺失或为空,则肯定是400 Bad Request错误。
然而,当涉及到“客户不能拥有超过3个联系人”时,情况就不那么清楚了。如果您已将主体限制为接受0-3范围内的值,则为400 Bad Request,但是如果该字段接受任何整数,并且后来发现它不是0-3范围内的整数(在实体处理期间),则为409 Conflict(更好的想法)或403 Forbidden(更糟糕的想法)。

操作次数超过限制绝对不是400 Bad Request错误。它可能是403 Forbidden429 Too Many Requests

似乎不能仅使用400 Bad Request来处理所有错误。

重要的是始终在正文消息中解释问题的实质。

顺便说一句:403 Forbidden用于指示与身份验证或授权无关的禁止操作。


-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接