【问题标题】:REST API: 400 Bad Request or 404 Not Found which one should be used when passing parameter with invalid dataREST API: 400 Bad Request 或 404 Not Found 传递带有无效数据的参数时应该使用哪一个
【发布时间】:2015-05-05 05:11:37
【问题描述】:

我正在构建一个 REST API,但我很困惑我应该为以下情况抛出什么错误。

Rest API 网址是, https://myapp.com/users/search?q=<search_query>&access_token=<token>&user_type=<type> 在上述端点中,user_type 参数具有有效值“admin”和“standard”。如果我得到其他值而不是 'admin' 或 'standard' 我应该抛出什么 http 错误? 它应该是 400 Bad Request 或 404 Not Found。

【问题讨论】:

    标签: web-services api rest https


    【解决方案1】:

    状态代码404 不适合这里,因为此代码表示资源找不到当前表示。对我来说,即使在尝试获取表示之前,资源也不接受客户端提供的查询参数。

    我会说使用状态代码400 和描述问题的有效负载。类似的东西:

    {
        "code": "errorcode",
        "description": "The value 'a value' isn't supported for parameter user_type"
    }
    

    这就是某些具有 REST API 的工具以这种方式处理此类错误的方式。例如:

    希望对你有帮助, 蒂埃里

    【讨论】:

      【解决方案2】:

      嗯 - 你在这里征求我们的意见。为什么不靠自己呢?

      由于您提出了两种错误类型:404 代表“找不到资源”。显然不是这样。找到您的资源(您的 API)。 HTTP 错误代码 400 表明客户端发送了错误的请求 - 好的,您的客户端没有提供正确的查询变量。

      但是,请检查 RFC 7231,第 6.5.1 节(我为你做的;)):

      400 (Bad Request) 状态码表示服务器不能或不会处理请求,因为某些东西被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性请求路由) .

      由于您没有提供更多信息,您的客户可以请求什么以及为什么(是用户输入?)很难回答您的问题。

      我的意见:通过 HTTP 200 回答 OK(请求正常!),但提供信息让客户端知道由于某些更高的(与 HTTP 无关的)错误,请求是不可接受的。

      干杯。

      【讨论】:

      • 是的,它是用户输入。用户可以输入任何他想要的。但是输入将根据上述两个值“admin”和“standard”进行验证。 @insaneivan
      • 我想那你应该听听我的意见。未找到格式错误的请求和资源。这不是 HTTP 或 API 调用错误。该错误位于更高级别(在您的变量中),并且与 HTTP 或您的 API 无关
      猜你喜欢
      • 2021-03-23
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      相关资源
      最近更新 更多