Api 引发 ValueError 时的 http 状态代码是什么?
What is the http status code when Api raises ValueError?
我在 API 中引发值错误,因为特定函数的输入参数无效,如下所示
- 密码不匹配
- 数据库中不存在用户或值为负数
客户端根据 API 规范提供了有效参数,因此我认为客户端错误并非如此(400 系列代码)。
所以我是否必须 return 状态代码为 200,因为该请求已完全处理,或者应该有一个 http 状态代码。
您应该再发送一个状态码。
重定向 3xx 是处理请求的一个很好的例子,它给出了不同于 200 的另一个状态。通过POST请求提交表单后,建议服务器给出307 Temporary Redirect
。然而,请求被完全处理,甚至成功了。
在您的情况下,发生了一些事情(已引发异常)。通过发送适当的状态让客户知道它。我会推荐 403 Forbidden
或 401 Unauthorized
.
由于有多种 invalid
类型,您应该针对每种不同的情况使用最合适的 HTTP 状态代码,具体情况具体分析。
对于Password doesn't match
,我认为403 Forbidden
是最好的选择。
对于User doesn't exist in db
,204 No Content
是最好的。
对于value is negative
,这取决于为什么值为负。
您可能应该 return 4xx 范围内的某些内容,以指示请求中存在阻止请求执行的错误。 400(错误请求)用于输入验证失败。对于身份验证或密码的问题,401(未授权)是最合适的。如果用户已通过身份验证但不允许执行特定操作,请使用 403(禁止)。如果问题出在不存在的对象(如用户)上,您可以 return 404(未找到)。
2xx 响应代码用于指示请求已成功接收和处理,3xx 用于告诉用户没有发生任何事情,但有一些可以执行的替代请求(例如重定向 301 和 303,或未修改 304)。 5xx 保留用于指示服务器端阻止请求执行的各种问题。
Wikipedia 很好地概述了常见的 http 响应代码及其含义。
我在 API 中引发值错误,因为特定函数的输入参数无效,如下所示
- 密码不匹配
- 数据库中不存在用户或值为负数
客户端根据 API 规范提供了有效参数,因此我认为客户端错误并非如此(400 系列代码)。
所以我是否必须 return 状态代码为 200,因为该请求已完全处理,或者应该有一个 http 状态代码。
您应该再发送一个状态码。
重定向 3xx 是处理请求的一个很好的例子,它给出了不同于 200 的另一个状态。通过POST请求提交表单后,建议服务器给出307 Temporary Redirect
。然而,请求被完全处理,甚至成功了。
在您的情况下,发生了一些事情(已引发异常)。通过发送适当的状态让客户知道它。我会推荐 403 Forbidden
或 401 Unauthorized
.
由于有多种 invalid
类型,您应该针对每种不同的情况使用最合适的 HTTP 状态代码,具体情况具体分析。
对于Password doesn't match
,我认为403 Forbidden
是最好的选择。
对于User doesn't exist in db
,204 No Content
是最好的。
对于value is negative
,这取决于为什么值为负。
您可能应该 return 4xx 范围内的某些内容,以指示请求中存在阻止请求执行的错误。 400(错误请求)用于输入验证失败。对于身份验证或密码的问题,401(未授权)是最合适的。如果用户已通过身份验证但不允许执行特定操作,请使用 403(禁止)。如果问题出在不存在的对象(如用户)上,您可以 return 404(未找到)。
2xx 响应代码用于指示请求已成功接收和处理,3xx 用于告诉用户没有发生任何事情,但有一些可以执行的替代请求(例如重定向 301 和 303,或未修改 304)。 5xx 保留用于指示服务器端阻止请求执行的各种问题。
Wikipedia 很好地概述了常见的 http 响应代码及其含义。