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

Lul*_*zim 5 rest restful-url

我想知道我会在下面的代码中的 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'}});
        }
Run Code Online (Sandbox Code Playgroud)

我不想让他们两个都保留 200,因为我希望从前端管理消息直通状态代码,例如,如果它返回 200,我会说“成功创建”,而在其他情况下,我会显示“未找到数据”。

你的建议是什么?

Tim*_*Tim 1

“未找到数据”应该是 404。

“创建成功”应该是 201。

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

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

更新:

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

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" }
Run Code Online (Sandbox Code Playgroud)

  • 如果我们返回 404 表示“未找到数据”,那么我们会返回什么表示“请求未找到,或错误的网址”,我们如何区分这样的情况 (2认同)