环境: 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
,但找不到适用的示例(如果一开始是正确的)。我走在正确的轨道上吗?是否有任何资源可能会有所帮助?
Accept-Ranges
是一个 响应标头,因此它不能帮助您将分页请求从客户端发送到服务器。该规范允许您返回此标头的任何值(尽管唯一的标准化值是 bytes
),因此您可以使用Accept-Ranges
作为服务器通知客户端您的 API 支持分页的一种方式,但 TBH 可能不是那么有用。
匹配的请求标头为 Range
。这个标头的值是一个ranges-specifier
,但不幸的是,根据规范,唯一有效的值是一个byte-ranges-specifier
,例如 The 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
}