我想知道我在下面代码的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我会说“成功创建”,而在其他情况下我会显示“没有数据找到”。
你的建议是什么?
答案 0 :(得分: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本身并没有帮助区分这些案例。该网址代表资源。与它所代表的东西不同,它本身并不是一件事。
某些API在向不存在的端点发出请求时会响应400,但我个人并不喜欢这样,因为它似乎与Web服务器响应正常资源请求的方式相矛盾。它也可能会混淆构建客户端应用程序的开发人员,因为它表明HTTP传输中的某些内容是错误的,而不是在他们自己的代码中。
假设您决定将404用于丢失的数据库实体,并将400用于您认为错误的请求。这可能对您有用,但随着您的应用程序的增长,您将发现越来越多的简单状态代码无法自行通信的方案。这是我的观点..
我的建议是所有 API响应都会在正文中包含有意义的数据。 (JSON或XML,或者您正在使用的任何内容)。对无效网址的请求可能如下所示:
HTTP/1.1 404 Not Found
{ "error": "no_endpoint", "errorText":"No such API end point" }
答案 1 :(得分:0)
虽然,我同意上面的帖子,但我也会考虑某些情况下的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