在RESTful Web服务中设计分页端点的最佳方法

4
我有一个RESTful Web服务的/entities端点,如果以GET请求调用,则返回数据库中存储的所有实体。
现在我想创建分页功能。只检索结果页面,而不是所有实体,以便最小化响应大小。
我考虑两种方法:
1.通过/entities端点上的查询参数发送分页信息,并使用GET请求。例如:/entities?page=1&size=10 2.使用另一个HTTP方法(如OPTIONS),我没有在Web服务上处理OPTIONS请求,我可以利用这一点,同时保持RESTful Web服务的本质,即使用不同的HTTP方法执行不同的操作。在这种情况下,端点可能是这样的:/entities/1/10,这更加user-friendly
这两个选择都可以实现,我想预先知道哪一个符合REST设计标准。

可能是REST Web应用程序中的分页的重复问题。 - Leo
3个回答

4
如aljo f所提到的,没有官方标准。但是在寻找最佳实践时,我发现了这个网站:http://www.restapitutorial.com
在资源页面中,有一个链接可以下载作者建议的完整REST最佳实践的.pdf文件。其中,除其他事项外,还有一个关于分页的部分。
作者建议支持使用Range头和使用查询字符串参数两种方式。 请求 HTTP请求头示例:
Range: items=0-24

查询字符串参数示例:

GET http://api.example.com/resources?offset=0&limit=25

其中offset指的是起始项编号,limit是返回的最大项数。

响应

响应应包括一个Content-Range头,指示正在返回多少项以及有多少总项尚未检索

HTTP头示例:

Content-Range: items 0-24/66

Content-Range: items 40-65/*

在.pdf文件中有一些其他针对特定情况的建议。


0

我相信RESTful Web服务没有官方的“标准”。但是不同供应商有很多推荐/实现。

您的第一种方式,使用查询参数将是正确的方式。不同的HTTP方法(GET、PUT、DELETE、POST)用于不同类型的操作。我从未听说过它们被用于修改现有操作。

请参见维基百科 - REST


0

基于HATEOAS(超媒体作为应用程序状态引擎)标准,响应应该与前一页和后一页链接。

/entities?page=1&size=10/entities/1/10更好,因为(严格来说)1/10不是通过URI定位的资源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接