Pagination 在restful url上编码分页信息的标准方法?
我想我的问题最好用几个例子来解释 获取asc 也就是说,一方面我有条件(name=xxx&country=xxxx),另一方面我有影响查询的参数(\u page=3&\u page\u len=10&\u order=name asc) 现在,我考虑使用一些特殊的前缀(在本例中为“u”)来避免条件和参数之间的冲突(如果我的资源有一个“order”属性怎么办?) 是否有一些标准的方法来处理这些情况 -- 我找到了这个例子(只是挑一个) 得到 但在这种情况下,条件字段已经定义(没有开始或结束属性) 我在寻找一些通用的解决方案 -- 编辑,一个更详细的例子来澄清 每一项都是完全独立的。。。假设我的资源是客户,而且(幸运的是)我的数据库中有数百万个客户 所以url可以是 它应该能告诉我去年从阿根廷买东西的所有客户 现在我想使用这个服务来构建一个浏览页面,或者用ajax来填充一个组合,所以我的想法是添加一些metada来控制我应该获得什么信息 要构建浏览页面,我将添加 并用ajax填充自动建议组合 * 要使用与用户键入内容匹配的前100个客户填充组合Pagination 在restful url上编码分页信息的标准方法?,pagination,rest,friendly-url,Pagination,Rest,Friendly Url,我想我的问题最好用几个例子来解释 获取asc 也就是说,一方面我有条件(name=xxx&country=xxxx),另一方面我有影响查询的参数(\u page=3&\u page\u len=10&\u order=name asc) 现在,我考虑使用一些特殊的前缀(在本例中为“u”)来避免条件和参数之间的冲突(如果我的资源有一个“order”属性怎么办?) 是否有一些标准的方法来处理这些情况 -- 我找到了这个例子(只是挑一个) 得到 但在这种情况下,条件字段已经定义(没有开始或结束属性)
我的问题是,是否有某种标准的(书面的或非书面的)方式来以restfull url的方式对这类内容进行编码…没有标准或惯例来定义这样做的方式,但使用下划线(一个或两个)来表示元信息并不是一个坏主意。在某些语言中,这是用来按照约定指定成员变量的。我知道RESTful的人倾向于不喜欢使用HTTP头,但实际上有人考虑过使用HTTP头来解决分页问题。几年前,我编写了一个ISAPI扩展,它在URI中包含分页信息和其他非属性信息,我从来都不喜欢这种感觉。我在考虑做一些事情,比如:
GET http://...?name=xxx&country=xxxx&_orderby=name&_order=asc HTTP/1.1
Range: pageditems=20-29
...
http://.../myresource/page-10/3?name=xxx&country=yyy&order=name&orderby=asc
http://.../myresource/item/42
http://.../myresource/item/307E8599-AD9B-4B32-8612-F8EAF754DFDB
这会将结果集参数(例如,\u orderby
和\u order
)放入URI中,并将选择作为范围
标题。我有一种感觉,大多数HTTP实现都会搞砸这一点,尤其是因为RFC2616中可能会支持非字节范围。在和我做了一系列工作之后,我开始更认真地思考这个问题。是扩展范围以处理时间和字节的一个很好的例子
我想另一种处理方法是对页面上的每一项单独请求,作为单独的资源。如果您的代理允许这样做,那么您可能需要考虑它。更可能的情况是,中间缓存可以很好地使用这种方法。因此,您的资源将被定义为:
myresource/name=xxx;country=xxx/orderby=name;order=asc/20/
myresource/name=xxx;country=xxx/orderby=name;order=asc/21/
myresource/name=xxx;country=xxx/orderby=name;order=asc/22/
myresource/name=xxx;country=xxx/orderby=name;order=asc/23/
myresource/name=xxx;country=xxx/orderby=name;order=asc/24/
我不确定是否有人尝试过这样的东西。这将使URI可构造,这始终是IMHO的一个有用属性。这种方法的好处是,可以缓存单个响应,服务器可以自由地优化收集项目页面的处理,而不是以最有效的方式。基本思想是让客户机在URI中指定查询以及它想要检索的项目的索引。无需将“页面”的概念推入资源中,甚至无需使其可见。客户端可以迭代地检索对象,直到其页面已满或收到404
当然还有一个缺点。。。HTTP服务器和基础设施必须支持,否则创建/破坏连接的成本可能会彻底扼杀这一想法。注意: 我开始写这篇文章作为对他的评论。然后我打算把它添加为编辑,但我认为它应该作为一个单独的答案。这是一种完全不同的方法,也是一个单独的答案,因为这是一种不同的方法
我越想这个问题,我认为你真的有两种不同的资源需要处理:
GET http://...?name=xxx&country=xxxx&_orderby=name&_order=asc HTTP/1.1
Range: pageditems=20-29
...
http://.../myresource/page-10/3?name=xxx&country=yyy&order=name&orderby=asc
http://.../myresource/item/42
http://.../myresource/item/307E8599-AD9B-4B32-8612-F8EAF754DFDB
我认为这是你最初问题的核心。如果页面本身是一个资源,那么URI应该描述页面,这样类似于page-10
的内容就是我说的“一个包含10项的页面”,页面的下一部分是页码。查询部分包含过滤器
其他资源为页面包含的每个项目命名。项目的识别方式应由资源的种类来控制。我认为一个关键问题是结果资源是否独立。基于此概念,表示项目资源的方式有所不同
如果项表示仅在页面上下文中才合适,则可能适合内联包含表示。如果您这样做,那么请分别识别它们,并确保可以使用或检索它们。似乎以下URL应该会导致第三页的第五项,共十项:
http://.../myresource/page-10/3?...#5
http://.../myresource/page-10/3/5?...
决定这两者之间的最大因素是单个项目与