在设计有关分页的Restful API时,有啥好的实践吗?
例如我需要查询userid在[100,200]区间的结果,大家一般怎么做?
我能想到这些(都是get):
/users/from/100/to/200
/users/100/200
/users?from=100&to=200
/users?start=100&per_page=100
大家有啥好的建议么?怎么写能看起来比较干净?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
直接使用
/users
集合,URL不带任何参数,所有分页参数全部在请求头中设置, 按照REST设计的最佳实践, 响应中应该包含指向当前页的链接,用代码
self
标识, 指向集合中上一页的指示符prev
, 下一页指示符next
, 还应该包含一个total
标识集合的数量.这个在
RESTful Web Services Cookbook 中文版
第43页(3.7 如何设计集合表述
)有描述.PDF下载地址: http://vdisk.weibo.com/s/31DEe
但是,你的真正问题其实不是分页,而是userid在[100,200]区间的过滤条件,前面哪些url设计都偏离到分页的方式上去了
分页是请求 /users 资源集合,以userid排序,从x条开始,每次取y条
你的问题是请求 /users 资源集合,过滤条件为userid在100到200之间
/users?by=userid>e=100<e=200
by 以哪个属性过滤
gte 大于等于
lte 小于等于
这种东西说白了都是 db 层面的,MySQL 就 limit 了
/users?page=1
至于
start
,pagesize
,似乎没有必要放在url里看这个咋样
后两种比较好
如果只是个别页面需要,那就用 /users?from=100&to=200
如果是分页的话,就是后一个/users?start=100&per_page=100
分页/users?page=1这种更好,per_page 放在controller里更好。
要分页的话我都酱紫。
/user-page-{pageIndex} /user-page-1
但你说的是查询参数了。
/user/{start}-{end} /user/100-200
如果不需要total只需要has_next的话:
后台取数据时多取1个 返回数量如果大于page_size has_next = true; 否则为false
我赞成 /users/{start}-{end} /user/100-200 或者 /users/from/100/to/200
restful 只是url的设计原则。