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