我在我的 API 中提出值错误,因为特定函数的输入参数无效,如下所示
- 密码不匹配
- 用户在数据库中不存在或值为负
客户端根据 API 规范提供了有效参数,所以我认为客户端错误不是这种情况(400 系列代码)。
因此,我是否必须将状态代码返回为 200,因为该请求已完全处理,或者应该有一个 http 状态代码。
我在我的 API 中提出值错误,因为特定函数的输入参数无效,如下所示
客户端根据 API 规范提供了有效参数,所以我认为客户端错误不是这种情况(400 系列代码)。
因此,我是否必须将状态代码返回为 200,因为该请求已完全处理,或者应该有一个 http 状态代码。
您可能应该返回 4xx 范围内的内容,以表明请求有问题,导致请求无法执行。400(错误请求)是您用于失败的输入验证的内容。对于身份验证或密码问题,401(未授权)是最合适的。如果用户通过身份验证但不允许做特定的事情,则使用 403(禁止)。如果问题出在不存在的对象(如用户)上,您可以返回 404(未找到)。
2xx 响应代码用于指示请求已成功接收并处理,3xx 用于告诉用户没有发生任何事情,但有一些可以执行的替代请求(例如重定向 301 和 303,或未修改的 304)。5xx 保留用于指示服务器端阻止执行请求的各种问题。
Wikipedia很好地概述了常见的 http 响应代码及其含义。
您应该发送另一个状态代码。
提供除 200 之外的其他状态的已处理请求的一个很好的示例是重定向 3xx。通过 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
,这取决于为什么 value 为负。