5

我正在设计一个类似 REST 的 API,用于对基于 YUI 的客户端进行分页数据检索。GET 请求的 REST URL 如下所示:

/app/catalog/data?startIndex=<int>&results=<int>&sort=<sting>&dir=<string>

所有参数都是可选的,即如果没有给定参数,则数据库中的所有数据都将被转储。现在说数据库中只有 1000 条记录。提出以下要求:

/app/catalog/data?startIndex=1100&results=25

如果数据库的分页结果仍然为空,但请求很好,我应该返回什么状态码?!我无法确定这是204还是404

生成的媒体类型为 JSON 和 CSV。

4

4 回答 4

13

我会说 204 是最合适的。请求成功,只是没有结果。

10.2.5 204 No Content

The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation.

听上去一模一样。

于 2012-07-09T20:01:41.003 回答
7

我无法确定这是204还是404

两者都不。只需返回200一个空结果(空的 XML 文档或 JSON 数组,无论您使用什么)。通常我使用带有分页视图的 REST 服务,因此我会连同结果页面一起返回记录总数。这将帮助客户意识到错误。但从技术上讲,这并没有错。

用于操作(实际上没有要返回的内容)和204用于.DELETEPUT

顺便说一句(大胆的我):

如果没有给定参数,将转储数据库中的所有数据

相信,你不想这样做...

于 2012-07-09T20:02:06.920 回答
1

您通常以什么格式返回结果?我倾向于让这个 204 甚至 200 返回一个空列表。

于 2012-07-09T20:00:08.590 回答
1

由于有效负载,分页响应中的 HTTP 204 是不真实的。分页时,您应该返回分页信息,如返回的项目、总项目、偏移量等,这在 HTTP 204 中是不允许的。

我会使用以下之一:

  • HTTP 200,count=0,返回列表中没有项目。
  • HTTP 400,因为调用者要求的 url 无效
  • HTTP 404,因为找不到要返回的项目

选择最适合您的 API 工作方式的一种。我认为在这种情况下返回错误(4xx + 错误信息)是安全的,因为这些假设之一可能会超出偏移量:

  • 编码错误
  • 调用者没有从一开始就获取数据(没有新状态)
  • 调用者忽略分页数据(出现在每个响应中)
于 2020-12-17T13:35:57.193 回答