RESTful 预先存在的错误数据的响应代码?
RESTful response code for bad preexisting data?
我有一个案例,有时我们数据库中的数据不足以处理请求(即,我们需要一个帐号或一些尚未填充的东西)。
如果用户的请求包含无效语法,则会返回 400。
如果数据库关闭或服务失败,则为 500、502 或 503。
我正在考虑 422,这基本上意味着 "the request was not malformed, but the semantics of your request have led to an error"。这里的问题是它不是请求本身固有的东西,而是我们预先存在的数据的状态。
我明白你为什么要使用 422 并同意这一点。
但是,我想知道是否有一种优雅的方法可以在没有数据的情况下仍然完成请求?也许会发生响应,但可用功能等会降级。
如果没有,那么您能否在所需数据可用之前阻止该功能被公开? IE。例如,此人已登录并具有有效的会话 ID。
您详细说明的行为是服务器错误。因此,应该使用 5xx 响应代码而不是 4xx(表示客户端错误)。现在介绍 5xx 系列中的哪个响应代码;虽然似乎不存在任何正确定义服务器行为的响应代码,但 500 Internal Server Error 似乎是最接近的一个。在这里查看 rfc:https://www.rfc-editor.org/rfc/rfc2616#section-10.5.1
这还取决于您对服务执行的操作和资源。
我有一个案例,有时我们数据库中的数据不足以处理请求(即,我们需要一个帐号或一些尚未填充的东西)。
如果用户的请求包含无效语法,则会返回 400。 如果数据库关闭或服务失败,则为 500、502 或 503。
我正在考虑 422,这基本上意味着 "the request was not malformed, but the semantics of your request have led to an error"。这里的问题是它不是请求本身固有的东西,而是我们预先存在的数据的状态。
我明白你为什么要使用 422 并同意这一点。
但是,我想知道是否有一种优雅的方法可以在没有数据的情况下仍然完成请求?也许会发生响应,但可用功能等会降级。
如果没有,那么您能否在所需数据可用之前阻止该功能被公开? IE。例如,此人已登录并具有有效的会话 ID。
您详细说明的行为是服务器错误。因此,应该使用 5xx 响应代码而不是 4xx(表示客户端错误)。现在介绍 5xx 系列中的哪个响应代码;虽然似乎不存在任何正确定义服务器行为的响应代码,但 500 Internal Server Error 似乎是最接近的一个。在这里查看 rfc:https://www.rfc-editor.org/rfc/rfc2616#section-10.5.1
这还取决于您对服务执行的操作和资源。