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

时间:2017-04-12 07:59:25

标签: python http http-status-codes valueerror

我在API中引发了Value Error,因为特定函数的输入参数无效,如下所示

  1. 密码不匹配
  2. 用户在db中不存在或值为负数
  3. 客户根据API规范提供了有效参数,因此我认为客户端错误不是这种情况(400系列代码)。

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

3 个答案:

答案 0 :(得分:2)

由于存在各种invalid类型,因此应根据具体情况为每种不同情况使用最合适的HTTP状态代码。

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

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

value is negative,取决于价值为负的原因。

答案 1 :(得分:1)

您应该发送另一个状态代码。

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

在您的情况下,发生了一些事情(已经引发了异常)。让客户通过发送适当的状态来了解它。我建议403 Forbidden401 Unauthorized

答案 2 :(得分:1)

您可能应该从4xx范围返回一些内容,以表明该请求有问题导致请求无法执行。 400(错误请求)是您用于失败输入验证的内容。对于身份验证或密码问题,401(未授权)是最合适的。如果用户已通过身份验证但不允许执行特定操作,请使用403(禁止)。如果问题出在一个不存在的对象(如用户),则可以返回404(未找到)。

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

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