当前位置: 首页 > 知识库问答 >
问题:

在Restful API设计中应该返回空列表[] 200/204或404吗?[重复]

山森
2023-03-14

例如,有一个宁静的 API GET http://luexu.com/users/{页面} 来列出第 N 页中的用户。假设每个页面中有 20 个用户。数据库中总共有 100 个用户。GET http://luexu.com/users/5 返回第 80 个到第 100 个用户。

那么queryGET怎么样http://luexu.com/users/10?这是所有用户中的一个。返回空列表、空数组[]404,哪种设计更好?

200?

{
    "code": 200,
    "msg": "OK",
    "data": []
}

还是204?

{
    "code": 204,
    "msg": "OK",
    "data": []
}

还是404?

{
    "code": 404,
    "msg": "Not Found",
    "data": null
}

共有3个答案

越文康
2023-03-14

返回404不适合你有部分页面的情况(例如你有85个用户),所以我会选择一个空列表,当你有一个二进制问题,资源找到与否时,404套件更好。

我会看看以下类似的问题:Rest服务返回404

雍嘉勋
2023-03-14

这是一个没有“最佳”答案的问题。

你所能做的就是查看选项,然后选择最适合你的方案的选项。

根据经验,我个人避免退回404。原因是不清楚你为什么得到404。你可能会得到404,因为你的网址是错误的,所以如果你在没有数据的情况下选择退回404,那么你最终会陷入不清楚的境地。你怎么知道你为什么得到404?这不好。

返回一个空数组的200很好。返回204也很好。

重要的是做出选择,保持一致并记录选择,这样你的API的用户就知道你做出了这个选择以及为什么。

一致性和清晰性,以此为目标。

沈单弓
2023-03-14

那么代码204怎么样?

在HTTP中,204 No Content意味着非常特殊的东西——消息体的长度为零字节。

204(无内容)状态代码表示服务器已成功完成请求,并且响应有效负载正文中没有要发送的附加内容。

因此,例如,如果您要发送json编码的文档,则不应考虑它。

如果空列表是资源的可接受表示形式,则可以使用200作为响应代码。例如,考虑堆栈溢出本身的URI。

https://stackoverflow.com/questions/tagged/cqrs 或域驱动设计或事件溯源?sort=最新

截至2019-06-01,带有这些标签的问题不到999页,但服务器计算此页面的正确表示没有问题(包括编号最高的页面为426的信息)。因此,200的语义非常合适。

404表示没有可用的资源表示。所有4xx类响应代码都表示请求出错——在这种情况下,它表明客户端在URI上犯了错误。这可能是暂时的情况(您现在不应该询问该资源)。所以如果您想指示的是客户端已经离开了域协议的快乐路径,这也没关系。

怎么选?我从HTTP规范中的这个观察开始

服务器应该发送一个表示,其中包含对错误情况的解释,以及它是暂时的还是永久的。

那么哪个对客户端有用呢?问题的表示,还是空集合的表示?当相同的资源被用于不同的事情时,这可能是一个具有挑战性的问题。

 类似资料:
  • 我知道这是一个相当普遍的问题,但是我还没有找到让我满意的答案。 我已经使用django rest框架一段时间了,但除了给出的例子之外,这基本上是无关紧要的。其默认行为是在访问具有空项目列表的路由时返回具有空列表资源的 HTTP 200。例如:如果我们有一个路由,如来访问文章列表,但它不包含任何项目,我们将得到类似于以下json的响应: 这很好。我们在/articles/找到了我们要找的资源,只是碰

  • 问题内容: 给定一个构造函数,例如 此功能是否应包括健全性检查,例如或?如果此函数应包含完整性检查,则构造函数应返回什么值?甲值,或错误()?下面包括一个示例。 问题答案: 返回。使用可分辨的值(例如)来指示错误不是惯用的。 另外:表达式的计算结果始终为。简化对或的检查。

  • 我正在尝试检索一个带有Android特定注释的类列表。我正在尝试使用反射库来完成此操作。但无论我做什么,Reflections都返回一个空集。最后,我尝试使用Reflections.getAllTypes(),它应该返回包中的所有类,它给我的消息是“Could not find subtypes of Object.nake SubTypesScanner initialized to inclu

  • 有人能告诉我为什么列表返回空吗?我的xpath是准确的,因为我重新检查了它,但我仍然无法迭代它,而调试for循环甚至没有执行。我不确定我哪里出了问题。

  • 我想在spring boot中,当响应对象对于每个响应自动为null时返回404。 我需要建议。 我不想检查控制器中的对象是否为null。

  • 我有一个Restendpoint,如果没有产品,它将返回204,以及以下通用角度服务: 和 但是,当服务生成 204 代码时,我收到以下错误: TypeError:无法读取null的属性“status” 这怎么可能发生?如果 API 以 204 响应,为什么整个响应为空?