在设计有关分页的Restful API时,有啥好的实践吗?

发布于 2022-08-29 19:15:53 字数 215 浏览 19 评论 0

例如我需要查询userid在[100,200]区间的结果,大家一般怎么做?

我能想到这些(都是get):
/users/from/100/to/200
/users/100/200
/users?from=100&to=200
/users?start=100&per_page=100

大家有啥好的建议么?怎么写能看起来比较干净?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

最舍不得你 2022-09-05 19:15:53

直接使用/users集合,URL不带任何参数,
所有分页参数全部在请求头中设置, 按照REST设计的最佳实践, 响应中应该包含指向当前页的链接,用代码self标识, 指向集合中上一页的指示符prev, 下一页指示符next, 还应该包含一个total标识集合的数量.

这个在RESTful Web Services Cookbook 中文版第43页(3.7 如何设计集合表述)有描述.

PDF下载地址: http://vdisk.weibo.com/s/31DEe

能否归途做我良人 2022-09-05 19:15:53

/users/from/100/to/200
烂,这种不分青红皂白把参数全部搞成目录的方式烂爆了
这么搞的人实际上根本不理解REST

/users/100/200
语义缺失,不好

/users?from=100&to=200
这个很正常,我会用这个

/users?start=100&per_page=100
start和page size的设计有点怪,一般都是from / to,或者 page / page size

但是,你的真正问题其实不是分页,而是userid在[100,200]区间的过滤条件,前面哪些url设计都偏离到分页的方式上去了

分页是请求 /users 资源集合,以userid排序,从x条开始,每次取y条

你的问题是请求 /users 资源集合,过滤条件为userid在100到200之间

/users?by=userid>e=100<e=200
by 以哪个属性过滤
gte 大于等于
lte 小于等于

自由范儿 2022-09-05 19:15:53

这种东西说白了都是 db 层面的,MySQL 就 limit 了

久伴你 2022-09-05 19:15:53

/users?page=1
至于startpagesize,似乎没有必要放在url里

梦幻的味道 2022-09-05 19:15:53
?limit=10&offset=10

看这个咋样

我不吻晚风 2022-09-05 19:15:53

后两种比较好
如果只是个别页面需要,那就用 /users?from=100&to=200
如果是分页的话,就是后一个/users?start=100&per_page=100
分页/users?page=1这种更好,per_page 放在controller里更好。

将军与妓 2022-09-05 19:15:53

要分页的话我都酱紫。
/user-page-{pageIndex} /user-page-1

但你说的是查询参数了。
/user/{start}-{end} /user/100-200

Saygoodbye 2022-09-05 19:15:53

如果不需要total只需要has_next的话:

后台取数据时多取1个 返回数量如果大于page_size has_next = true; 否则为false

天气好吗我好吗 2022-09-05 19:15:53

我赞成 /users/{start}-{end} /user/100-200 或者 /users/from/100/to/200
restful 只是url的设计原则。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文