Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
REST API状态代码分页_Rest_Http_Pagination_Api Design - Fatal编程技术网

REST API状态代码分页

REST API状态代码分页,rest,http,pagination,api-design,Rest,Http,Pagination,Api Design,我目前正在使用Jersey框架编写RESTAPI。我遵循HATEOAS原则,用户应该只通过响应体order头中的给定链接在api中移动。在一些资源上,我实现了分页功能。但我想知道,当用户不遵守我的边界,就像随机发出请求,而请求的页面实际上“超出边界”时,我应该告诉用户什么(HTTP状态代码)。目前我只是返回一个空集合,但我认为作为一个用户,我无法从这样的响应中做出一些东西。我考虑过使用状态代码“未找到”,但我不确定这是否合适。我真的想忠于REST,这意味着我忠于HTTP。那么,有谁能给我一些建议

我目前正在使用Jersey框架编写RESTAPI。我遵循HATEOAS原则,用户应该只通过响应体order头中的给定链接在api中移动。在一些资源上,我实现了分页功能。但我想知道,当用户不遵守我的边界,就像随机发出请求,而请求的页面实际上“超出边界”时,我应该告诉用户什么(HTTP状态代码)。目前我只是返回一个空集合,但我认为作为一个用户,我无法从这样的响应中做出一些东西。我考虑过使用状态代码“未找到”,但我不确定这是否合适。我真的想忠于REST,这意味着我忠于HTTP。那么,有谁能给我一些建议,甚至告诉我,我的问题是否真的有规则

也许是一个具体的例子:

  • 页面大小=10
  • 集合大小=27
  • 请求页面=4
  • 分页从第0页开始
,因此请求
http://...../resource?page=0
,返回第一页。 我的问题是,对于请求
http://...../resource?page=4
?目前我只是返回null,但我认为这不是正确的响应。 提前谢谢

编辑:
我只是想问一下,如果请求的页面是“空的”,预期的响应是什么。我知道固定页面大小的设计可能会在未来的更改请求中失败,但由于此API是微服务的一部分,因此除了我们团队内部有一场斗争外,不会有任何更改:)

404 not found
是越界访问的适当返回码

<>但是你应该考虑改变你的资源标识符(URI)。根据URL参数返回
404
200
不是一个好的设计

最好将每个页面都视为单个资源。哈提奥斯也是如此

 .../resource/page/0  #200 + return link in header to next resource  .../resource/page/1
 .../resource/page/4  #404 + return link to first resource  .../resource/page/0)

如果没有其他功能(例如范围访问),则使用URL参数应该是最后一个选项。

404notfound
是越界访问的适当返回代码

<>但是你应该考虑改变你的资源标识符(URI)。根据URL参数返回
404
200
不是一个好的设计

最好将每个页面都视为单个资源。哈提奥斯也是如此

 .../resource/page/0  #200 + return link in header to next resource  .../resource/page/1
 .../resource/page/4  #404 + return link to first resource  .../resource/page/0)

如果其他方法都不起作用(例如范围访问),那么使用URL参数应该是最后一个选项。

这显然是不标准的,因为当客户端想要更改偏移量或页面大小时,这会使他们的生活变得困难。它还将它们限制为“页面”概念,而不是所有客户端都使用这些术语。@EricStein,如果使用非固定页面大小,则必须通过URL参数对资源进行分页,但是,如果您使用固定的页面大小访问一个页面,这是绝对正确的概念。@PaulWasilewski在需求发生变化之前,它非常有效,您需要支持可变的页面大小。然后它要么是一个丑陋的黑客(
GET/page/0?size=25
),要么是一个突破性的改变。是的,是今天。但明天,这将是一个突破性的变化。您正在对一个可能会改变的需求做出永久性的决定。@PaulWasilewski OP没有提到页面大小是明确固定的。他说这是一个明显不标准的具体例子,因为当客户想要改变偏移量或页面大小时,这会让他们的生活变得艰难。它还将它们限制为“页面”概念,而不是所有客户端都使用这些术语。@EricStein,如果使用非固定页面大小,则必须通过URL参数对资源进行分页,但是,如果您使用固定的页面大小访问一个页面,这是绝对正确的概念。@PaulWasilewski在需求发生变化之前,它非常有效,您需要支持可变的页面大小。然后它要么是一个丑陋的黑客(
GET/page/0?size=25
),要么是一个突破性的改变。是的,是今天。但明天,这将是一个突破性的变化。您正在对一个可能会改变的需求做出永久性的决定。@PaulWasilewski OP没有提到页面大小是明确固定的。他说这里有一个具体的例子,可能的重复