【问题标题】:What status code should I response with when there is no data found in my database当我的数据库中没有找到数据时,我应该响应什么状态码
【发布时间】:2015-03-28 13:01:22
【问题描述】:

我想知道我会在下面的代码中的 else 语句中响应什么状态代码:

       if (album) {
            res.status(200).json({error: false, data: {channel_id: album.attributes.channel_id, id: album.id}});
        } else {
            res.status(200).json({error: false, data: {message: 'There is not album found with this name'}});
        }

我不想让他们两个都留 200,因为我想从前端管理通过状态代码发送的消息,例如,如果它返回 200,我会说“创建成功”,否则我会显示“无数据找到”。

你有什么建议?

【问题讨论】:

    标签: rest restful-url


    【解决方案1】:

    “未找到数据”应为 404。

    “创建成功”应该是 201。

    对于 201,您还应该为另一个请求可以访问新资源的位置指定一个 Location 标头。

    参考:
    201http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.2
    404http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5

    更新:

    我想我会对此进行扩展,因为下面的 cmets 指向我与自己斗争过的思维过程。

    GET /some/thing 响应 404 Not Found 可能意味着找不到数据库实体,但也可能意味着没有这样的 API 端点。 HTTP 本身并不能帮助区分这些情况。 URL 代表一个资源。与它所代表的事物不同,它本身并不是一个事物。

    当向不存在的端点发出请求时,某些 API 会响应 400,但我个人不喜欢这样,因为这似乎与 Web 服务器响应正常资源请求的方式相矛盾。它还可能使构建客户端应用程序的开发人员感到困惑,因为它表明 HTTP 传输而不是他们自己的代码有问题。

    假设您决定将 404 用于丢失的数据库实体,将 400 用于您认为错误的请求。这可能对您有用,但是随着您的应用程序的增长,您会发现越来越多的场景是简单的状态代码无法自行通信。这就是我的观点..

    我的建议是所有 API 响应在正文中携带有意义的数据。 (JSON 或 XML,或任何你使用的)。对无效 url 的请求可能如下所示:

    HTTP/1.1 404 Not Found
    
    { "error": "no_endpoint", "errorText":"No such API end point" }
    

    【讨论】:

    • 如果“No data found”返回404,“Request not found, or bad url”返回什么,如何区分这种情况
    • 要成为 RESTful,URL 代表资源。如果找不到该资源,则为 404。仅仅因为您的后端有可以理解 URL 的代码并不能找到它。如果您确实需要客户端进行区分,则返回 JSON 或 XML 以及有关错误的更多信息。仅仅因为它是 404 并不意味着它不能传送数据。
    • 问题是我不想处理来自后端的“找不到专辑”之类的特定消息,根据后端的状态编写消息不是前端工作吗?这就是为什么我正在寻找可以区分味精的原因,例如“未找到实体”与“错误的 url,或未找到 url”
    • 首先,HTTP 状态码不区分 entity not found 和 url not found。就 HTTP 而言,实体和 URL 是一回事。
    • 其次,前端的工作是解释响应并显示一条消息,当然。但由于后端知道什么存在和不存在,因此最好添加更多上下文。
    【解决方案2】:

    虽然我同意上面的帖子,但在某些情况下我也会考虑 HTTP 状态 200。

    例如,您有 Post 和 Post_Comments 实体。当您请求 cmets 提供 Post Id 时,您可以有 404(然后需要在 REST API 使用者端处理的错误)或 200,这意味着一切正常并返回一个空数组。在 HTTP 状态 200 的情况下,您不需要处理错误。举个例子,看看FB如何处理HTTP代码https://apigee.com/about/blog/technology/restful-api-design-what-about-errors

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 2013-10-26
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 2012-06-19
      • 1970-01-01
      相关资源
      最近更新 更多