我正在创建一个 REST API,发现在某些情况下很难选择要返回的正确 HTTP 状态代码。
假设我期望某个值,当它不存在时,我无法执行特定任务并返回错误。由于缺少值,服务器无法处理该请求,但它是客户端发送的,格式良好但不完整。最好返回一个4xx
or a 5xx
error?
坚持标准!
您将向客户端发送哪种 HTTP 状态代码由您决定,但您确实应该遵守标准. The RFC 7231 https://www.rfc-editor.org/rfc/rfc7231是 HTTP/1.1 协议内容和语义的当前参考。在 HTTP 协议之上创建 API 时,这是必读的内容。
4xx
vs 5xx
状态码
Use 4xx
客户端错误的状态代码和5xx
服务器错误的状态代码:
6.5.客户端错误 4xx https://www.rfc-editor.org/rfc/rfc7231#section-6.5
The 4xx
(Client Error)类状态码表明客户端
似乎犯了错误。除非回复HEAD
请求,则
服务器应该发送一个包含解释的表示
错误情况,以及它是暂时的还是永久的
健康)状况。这些状态代码适用于任何请求方法。
用户代理应该向用户显示任何包含的表示。
6.6.服务器错误 5xx https://www.rfc-editor.org/rfc/rfc7231#section-6.6
The 5xx
(服务器错误)状态代码类别表明服务器
意识到自己犯了错误或无法执行
要求的方法。除非回复HEAD
请求,则
服务器应该发送一个包含解释的表示
错误情况,以及它是暂时的还是永久的
健康)状况。用户代理应该显示任何包含的表示
给用户。这些响应代码适用于任何请求
方法。
您应该使用哪个状态代码
对于您在问题中提到的情况,您可以使用400
或者可能422
(来自 WebDAV,HTTP 扩展):
6.5.1. 400 错误请求 https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1
The 400
(Bad Request) 状态码表示服务器不能或
由于被认为是的原因,将不会处理该请求
客户端错误(例如,格式错误的请求语法、无效的请求
消息帧或欺骗性请求路由)。
11.2. 422 无法处理的实体 https://www.rfc-editor.org/rfc/rfc4918#section-11.2
The 422
(无法处理的实体)状态代码表示服务器
了解请求实体的内容类型(因此415
(不支持的媒体类型)状态代码不合适),并且
请求实体的语法是正确的(因此400
(错误的请求)
状态代码不合适)但无法处理包含的内容
指示。例如,如果 XML
请求正文包含格式正确的(即语法正确的),但是
语义错误的 XML 指令。
除了状态代码之外,请确保发送包含响应负载中错误情况说明的表示形式(例如 JSON 或 XML)。看看RFC 7807 https://www.rfc-editor.org/rfc/rfc7807,它描述了 HTTP API 问题详细信息的标准。
很棒的决策图
欲了解更多详细信息,请检查此决策图 http://racksburg.com/choosing-an-http-status-code/从拉克斯堡:
状态代码大致分为三类:
从这里开始:
选择2xx
and 3xx
状态码:
选择4xx
状态码:
选择5xx
状态码:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)