我正在通过REST API中的标头实现分页,例如:
默认情况下,返回多个项目的请求将分页为32个项目。
请求可以包含
Range
标头以指定其他项目。特殊情况:
- 如果请求未包含
Range
标头,则会返回400 Bad Request
。- 如果客户要求收集部分内容,但服务器无法提供该部分,
416 Requested Range Not Satisfiable
(例如收集时为空)。- 否则,服务器返回带有
Content-Ranges
标题和206 Partial Content
的部分集合。实施例
与集合相关的选项和/或要求:
curl -u '<email>:<token>' \ -H 'Accept: application/json; version=1.0.0' \ -X OPTIONS \ https://example.com/foos
成功时响应HTTP 200:
Accept-Ranges: foos
Allow: HEAD,GET,OPTIONS
获取请求:
curl -u '<email>:<token>' \ -H 'Accept: application/json; version=1.0.0' \ -H 'Range: foos=100-199' \ https://example.com/foos
成功时响应HTTP 206:
Accept-Ranges: foos Content-Range: foos 100-199/1234
如果您发现任何异常,请不要犹豫批评。但我对这种行为比较满意。
但是,我也希望能够在不明确询问每页32个项目的情况下发送请求。我的意思是,默认情况下应该可以为每页提供32个项目而不指定任何Range
标题...并且在服务器的响应代码中有206个。因为我想允许客户忘记Range
标题。使用API会更简单。
如果可能,可以删除以下特殊情况:
如果请求未包含
Range
标头,则会返回400 Bad Request
。
您怎么看?
答案 0 :(得分:0)
请注意RFC states:
代理可以丢弃范围 标题字段,包含它不理解的范围单位。
因此,当您的客户端位于代理服务器后面时,range
标头可能会被删除。
但是,我也希望能够在不明确询问每页32个项目的情况下发送请求。我的意思是,默认情况下每页应该有32个项目而不指定任何Range标题...
这不应该太难。伪:
if (range-header-present)
{
range = parseRangeFromHeader();
}
else
{
range = 0-31;
}