5

环境:ASP.NET MVC 4 Web API

鉴于 GET 的 RESTful 标准是:

http://www.example.com/api/entity/返回所有实体的集合 http://www.example.com/api/entity/{id}返回 ID 为 {id} 的实体

...如果有这么多“实体”以至于第一次调用会返回大量的结果数据,该怎么办?

我可以完全禁止该调用并返回 HTTP 500 或其他内容,但我宁愿遵守标准并实现某种范围选项,尽管它可能是任意的。

我一直在寻找允许相当于分页和遇到的 HTTP 标头Accept-Ranges,但找不到适用的示例(如果一开始就正确的话)。我在正确的轨道上吗?有没有可能有帮助的资源?

4

1 回答 1

3

Accept-Ranges是一个响应标头,因此这无助于您将分页请求从客户端发送到服务器。该规范允许您为此标头返回任何值(尽管唯一的标准化值是bytes),因此您可以Accept-Ranges用作服务器通知客户端您的 API 支持分页的一种方式,但 TBH 可能没有那么有用。

匹配的请求标头是Range. 此标头的值是 a ranges-specifier,但不幸的是,根据规范,唯一有效的值是 a byte-ranges-specifierThe first 500 bytes (byte offsets 0-499, inclusive): bytes=0-499它对于我们想要的类型分页没有用。

由于没有标准,您只需编写自己的请求标头或查询参数以进行分页。以下是我们为我正在开发的 RESTful API 所做的事情:

GET /users/?offset=10&limit=50

{
    "users": [...],
    "offset": 10,
    "limit": 50,
    "total": 10000
}
于 2013-09-25T22:19:05.513 回答