6.3.2 分页和排序
你可能注意到了在 home 资源的链接中,全部都有 page、size 和 sort 参数。默认情况下,像是对 /api/tacos 这种集合资源请求的接口来说,将会从第一页返回每页 20 个数据项。但是可以根据请求的要求,通过指定特定的 page 和 size 参数来调整页面大小和哪一页。
举个例子,要请求 tacos 的页面大小为 5 的第一页,可以发起以下 GET 请求(使用 curl):
$ curl "localhost:8080/api/tacos?size=5"
假设有多于 5 条 tacos 数据,可以通过添加 page 参数请求 tacos 数据的第二页:
$ curl "localhost:8080/api/tacos?size5&page=1"
注意 page 参数是从 0 开始的,意思是请求第 1 页实际上是请求的第 2 页。(还会注意到许多 shell 命令行在请求中的 & 符号上出错,这就是为什么我在前面的 curl 命令中引用整个 URL 的原因。)
可以使用字符串操作将这些参数添加到 URL 中,但是 HATEOAS 提供了响应中第一个、最后一个、下一个和前一个页面的链接:
"_links" : {
"first" : {
"href" : "http://localhost:8080/api/tacos?page=0&size=5"
},
"self" : {
"href" : "http://localhost:8080/api/tacos"
},
"next" : {
"href" : "http://localhost:8080/api/tacos?page=1&size=5"
},
"last" : {
"href" : "http://localhost:8080/api/tacos?page=2&size=5"
},
"profile" : {
"href" : "http://localhost:8080/api/profile/tacos"
},
"recents" : {
"href" : "http://localhost:8080/api/tacos/recent"
}
}
有了这些链接,API 的客户端就不需要跟踪它所在的页面并将参数连接到 URL。相反,它必须知道如何根据这些页面导航链接的名称查找其中一个链接并跟踪它。
sort 参数允许根据实体的任何属性对结果列表进行排序。例如,需要一种方法来获取最近创建的 12个 tacos,以便 UI 显示,可以通过指定以下分页和排序参数组合来做到这一点:
$ curl "localhost:8080/api/tacos?sort=createAt,desc?page=0&size=12"
这里,sort 参数指定了应该根据 createdDate 属性进行排序,并按降序排序(以便最新的 tacos 排在前面)。页面和大小参数的指定确定了应该在第一个页面上看到 12 个 tacos。
这正是 UI 为了显示最近创建的 tacos 所需要的。它与在本章前面的 DesignTacoController 中定义的 /design/recent 端点大致相同。
不过有个小问题,需要对 UI 代码进行硬编码,以请求包含这些参数的 tacos 列表。但是,通过使客户端对如何构造 API 请求了解得太多而增加了客户端的一些弱兼容性。如果客户端可以从链接列表中查找 URL,那就太好了。如果 URL 更简洁,就像以前的 /design/recent 端点一样,那就更好了。
复制链接