我在API中引发了Value Error,因为特定函数的输入参数无效,如下所示
客户根据API规范提供了有效参数,因此我认为客户端错误不是这种情况(400系列代码)。
因此,我是否必须将状态代码返回为200,因为该请求已完全处理,或者应该有一个http状态代码。
答案 0 :(得分:2)
由于存在各种invalid
类型,因此应根据具体情况为每种不同情况使用最合适的HTTP状态代码。
对于Password doesn't match
,我认为403 Forbidden
是最佳选择。
对于User doesn't exist in db
,204 No Content
是最好的。
value is negative
,取决于价值为负的原因。
答案 1 :(得分:1)
您应该发送另一个状态代码。
处理请求的一个很好的例子是另一个状态而不是200,是重定向3xx。通过POST请求提交表单后,建议服务器提供307 Temporary Redirect
。但是,请求已完全处理,甚至成功。
在您的情况下,发生了一些事情(已经引发了异常)。让客户通过发送适当的状态来了解它。我建议403 Forbidden
或401 Unauthorized
。
答案 2 :(得分:1)
您可能应该从4xx范围返回一些内容,以表明该请求有问题导致请求无法执行。 400(错误请求)是您用于失败输入验证的内容。对于身份验证或密码问题,401(未授权)是最合适的。如果用户已通过身份验证但不允许执行特定操作,请使用403(禁止)。如果问题出在一个不存在的对象(如用户),则可以返回404(未找到)。
2xx响应代码用于表示请求已成功接收和处理,3xx用于告诉用户没有发生任何事情,但有一些备用请求可以执行(例如重定向301和303,或未修改304)。 5xx保留用于发信号通知服务器端的各种问题,以防止执行请求。
Wikipedia概述了常见的http响应代码及其含义。