我的RESTful Web服务上有/entities
端点,如果使用GET
请求调用,则返回全部数据库中存储的实体。
我现在要创建的是分页功能。能够仅检索这些结果的页面而不是所有实体,只是为了最小化响应的大小。
我正在考虑两种方法。
使用/entities
请求在GET
端点上通过查询参数发送分页信息。例如,/entities?page=1&size=10
使用其他HTTP Method
,例如OPTIONS
(我知道它不适合用于此类事情)。我不会在我的Web服务上处理OPTIONS
个请求,我可以利用它,同时保持RESTful Web服务的本质,即使用不同的HTTP Methods
进行不同的操作。在这种情况下,端点可能是这样的:/entities/1/10
,(我认为)更用户友好。
两种替代方案都可以实现,我想事先知道哪一个更符合REST设计标准。
答案 0 :(得分:3)
正如aljo所提到的,没有官方标准。但是我在寻找最佳实践时遇到了这个网站:
http://www.restapitutorial.com
在资源页面中有一个下载.pdf的链接,其中包含作者建议的完整REST最佳实践。除此之外还有一个关于分页的部分。
作者建议使用Range标头和使用查询字符串参数添加对两者的支持。
请求强>
HTTP标头示例:
Item item;
item.Editing.BeginEdit();
item.Fields["fieldname"].Value += "|{652FD742-AAE3-468D-81BE-7EF18E06B796}";
item.Editing.EndEdit();
查询字符串参数示例:
Range: items=0-24
其中 offset 是开始项目编号, limit 是要返回的最大项目数。
<强>响应强>
响应应包含一个Content-Range标头,指示要返回的项目数以及尚未检索的项目总数
HTTP标头示例:
GET http://api.example.com/resources?offset=0&limit=25
在.pdf中,针对更具体的案例还有其他一些建议。
答案 1 :(得分:0)
我相信没有正式的标准&#34;用于RESTful Web服务。但是不同供应商提出了许多建议/实施方案。
您的第一种方式,使用查询参数将是正确的。不同的HTTP方法(GET,PUT,DELETE,POST)用于不同类型的操作。我从来没有听说过他们被用来修改现有的操作。
答案 2 :(得分:0)
基于HATEOAS(作为应用程序状态引擎的超媒体)标准,响应应该与上一页和下一页链接。
/entities?page=1&size=10
比/entities/1/10
更为可取,因为(严格来说)1/10不是要通过URI定位的资源。