我目前正在使用 Jersey Framework 编写 REST API。我遵循 HATEOAS 原则,用户只能通过我的响应正文或 header 中的给定链接在 api 中移动。在一些资源中,我实现了分页功能。不过,我想知道,当用户(HTTP 状态代码)不遵守我的界限并且就像随机发出请求时,我应该告诉用户什么(HTTP 状态代码),而请求的页面实际上是“越界”。目前我只是返回一个空集合,但我认为作为一个用户,我无法从这样的响应中得到什么。我考虑过使用状态代码“未找到”,但我不确定这是否合适。我真的很想忠于 REST,这意味着我忠于 HTTP。那么任何人都可以给我建议,甚至可以告诉我是否真的有解决我的问题的规则吗?
也许是一个具体的例子:
- 页面大小 = 10;
- Collection.size = 27;
- 请求的页面 = 4;
- 分页从第 0 页开始
,因此请求 http://...../resource?page=0
,返回第一页。
我的问题是,我应该为请求http://...../resource?page=4
返回什么?目前我只是返回 null,但我认为这不是正确的回应。
提前致谢
编辑: 如果请求的页面为“空”,我只是询问预期的响应。我知道固定页面大小的设计可能注定无法满足 future 的更改请求,但由于此 API 是微服务的一部分,因此不会有任何变化,除非我们团队内部发生争执:)
最佳答案
404 not found
是越界访问的适当返回码。
但是您应该考虑更改您的资源标识符 (URI)。根据 URL 参数返回 404
或 200
不是一个好的设计。
最好将每个页面都视为单一资源。 HATEOAS 也是如此。
.../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 参数应该是最后的选择。
关于REST API 状态代码分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38039983/