REST 架构中的分页

Pagination in REST architecture

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

/users?offset=20&limit=10

当用户总数小于 offset 时 return 怎么办?空列表、错误或...?

我们还应该 return 响应的用户总数吗?或者这应该是另一个端点?

我会 return 一个空数组。 URL 在技术上并没有错。也方便客户处理此类情况。

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

示例:

"meta": {
  "cursor": {
    "current": "0",
    "next": "20",
    "count": 20,
    "next_url": "/items?cursor=20&limit=20"
  }
}

我会确保客户端使用 URL 而不是尝试解析偏移量并自行计算下一个 URL。这将使它更加灵活,并允许您稍后更改实施细节。

例如,如果您使用偏移值为 SQL 数据库构建 OFFSET 查询,如果数据库变得非常大,您可能希望稍后更改实现,并使用更有效的抵消。例如,如果您的项目始终按时间排序,您可以更改 API 以输出时间戳作为偏移量。这可能允许更有效的查询。

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