当我的数据库中找不到数据时,我应该响应什么状态码

What status code should I response with when there is no data found in my database

我想知道在下面代码的 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,因为我希望从前端管理通过状态代码发送的消息,例如如果 returns 200 我会说 "Created Successfully" 而在其他情况下如果我会显示 "No data found".

你有什么建议?

"No data found" 应该是 404.

"Created Successfully" 应该是 201.

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

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

更新:

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

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

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

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

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

HTTP/1.1 404 Not Found

{ "error": "no_endpoint", "errorText":"No such API end point" }

尽管我同意上面的观点 post,但在某些情况下我也会考虑 HTTP 状态 200。

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