1

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

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

客户端根据 API 规范提供了有效参数,所以我认为客户端错误不是这种情况(400 系列代码)。

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

4

3 回答 3

1

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

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

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

于 2017-04-12T08:19:11.367 回答
1

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

提供除 200 之外的其他状态的已处理请求的一个很好的示例是重定向 3xx。通过 POST 请求提交表单后,建议服务器给一个307 Temporary Redirect. 但是,请求被完全处理,甚至成功。

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

于 2017-04-12T08:06:07.953 回答
1

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

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

因为User doesn't exist in db,204 No Content是最好的。

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

于 2017-04-12T08:09:50.920 回答