Api 引发 ValueError 时的 http 状态代码是什么?

What is the http status code when Api raises ValueError?

我在 API 中引发值错误,因为特定函数的输入参数无效,如下所示

  1. 密码不匹配
  2. 数据库中不存在用户或值为负数

客户端根据 API 规范提供了有效参数,因此我认为客户端错误并非如此(400 系列代码)。

所以我是否必须 return 状态代码为 200,因为该请求已完全处理,或者应该有一个 http 状态代码。

您应该再发送一个状态码。

重定向 3xx 是处理请求的一个很好的例子,它给出了不同于 200 的另一个状态。通过POST请求提交表单后,建议服务器给出307 Temporary Redirect。然而,请求被完全处理,甚至成功了。

在您的情况下,发生了一些事情(已引发异常)。通过发送适当的状态让客户知道它。我会推荐 403 Forbidden401 Unauthorized.

由于有多种 invalid 类型,您应该针对每种不同的情况使用最合适的 HTTP 状态代码,具体情况具体分析。

对于Password doesn't match,我认为403 Forbidden是最好的选择。

对于User doesn't exist in db204 No Content是最好的。

对于value is negative,这取决于为什么值为负。

您可能应该 return 4xx 范围内的某些内容,以指示请求中存在阻止请求执行的错误。 400(错误请求)用于输入验证失败。对于身份验证或密码的问题,401(未授权)是最合适的。如果用户已通过身份验证但不允许执行特定操作,请使用 403(禁止)。如果问题出在不存在的对象(如用户)上,您可以 return 404(未找到)。

2xx 响应代码用于指示请求已成功接收和处理,3xx 用于告诉用户没有发生任何事情,但有一些可以执行的替代请求(例如重定向 301 和 303,或未修改 304)。 5xx 保留用于指示服务器端阻止请求执行的各种问题。

Wikipedia 很好地概述了常见的 http 响应代码及其含义。