我在我的 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 为负。