REST体系结构中的分页

REST体系结构中的分页,rest,restful-architecture,restful-url,Rest,Restful Architecture,Restful Url,假设我们有一个端点返回一个用户列表,这个列表可以分页 /用户?偏移量=20,限值=10 当用户总数小于偏移量时返回什么?空列表、错误或 我们是否也应该返回响应中的用户总数?或者这应该是另一个端点?我将返回一个空数组。URL在技术上并没有错。这也使客户更容易处理此类案件 我还将返回一些关于响应的元数据,包括返回项目的总数和客户端可以从中请求下一组结果的URL 例如: "meta": { "cursor": { "current": "0", "next": "20",

假设我们有一个端点返回一个用户列表,这个列表可以分页

/用户?偏移量=20,限值=10

当用户总数小于偏移量时返回什么?空列表、错误或


我们是否也应该返回响应中的用户总数?或者这应该是另一个端点?

我将返回一个空数组。URL在技术上并没有错。这也使客户更容易处理此类案件

我还将返回一些关于响应的元数据,包括返回项目的总数和客户端可以从中请求下一组结果的URL

例如:

"meta": {
  "cursor": {
    "current": "0",
    "next": "20",
    "count": 20,
    "next_url": "/items?cursor=20&limit=20"
  }
}
我将确保客户端使用URL,而不是试图解析偏移量并自行计算下一个URL。这将使它更加灵活,并允许您稍后更改实现细节

例如,如果使用偏移量值为SQL数据库构造一个
offset
查询,那么如果数据库变得非常大,您可能希望稍后更改实现,并使用更有效的偏移量。例如,如果项目总是按时间排序,则可以更改API以输出时间戳作为偏移量。这可能允许更高效的查询


如果下一个URL为空,则客户端无需尝试获取更多项目。但是,如果存在下一个URL,根据您的实现,可能仍然不会有更多的结果(很难在大型数据库中计算结果总数,在这种情况下,您事先不知道总数)。

在这种情况下,没有返回的标准。这完全取决于你的申请。如果我是你,我会返回一个空列表而不是一个错误。你能提供一些链接,其中描述了基于时间戳的偏移更快吗?看看这里,我的观点并不是说你不必使用偏移。我只是提倡使用URL,这样你就不会限制你的选择:)