我有兴趣将直接REST接口暴露给JSON文档集合(想想CouchDB或Persevere).我遇到的问题是GET如果集合很大,如何处理集合根上的操作.
作为一个例子假装我暴露StackOverflow的Questions表,其中每一行都作为文档公开(不一定是这样的表,只是一个相当大的'文档'集合的具体例子).收集将在可提供/db/questions与通常的CRUD API GET /db/questions/XXX,PUT /db/questions/XXX,POST /db/questions是在玩.获取整个集合的标准方法是,GET /db/questions但如果天真地将每一行转储为JSON对象,那么您将获得相当大的下载和服务器上的大量工作.
解决方案当然是分页.Dojo 通过一个巧妙的RFC2616兼容扩展使用带有自定义范围单元的标头,在其JsonRestStore中解决了这个问题.结果是只返回请求的范围.这种方法优于查询参数的优点是它为查询留下了查询字符串(例如,或某些,以及是的,它被编码).Rangeitems206 Partial ContentGET /db/questions/?score>200%3E
这种方法完全涵盖了我想要的行为.问题是RFC 2616指定206响应(强调我的):
该请求必须具有包含Range头部字段(部分14.35),指示在期望的范围,并且可以具有包括一个If-Range头字段(部分14.27),以使所述请求为条件.
这在标题使用标题的上下文中是有意义的,但是是一个问题因为我希望206响应是默认处理天真客户端/随机人员探索.
我已经仔细研究了RFC,寻找解决方案,但对我的解决方案一直不满意,并对SO对这个问题的看法感兴趣.
我有过的想法:
200了Content-Range头! - 我不认为这是错的,但我更喜欢一个更明显的指标,即响应只是部分内容.400 Range Required - 所需标头没有特殊的400响应代码,因此必须手动使用和读取默认错误.这也使得通过Web浏览器(或像Resty这样的其他客户端)进行探索变得更加困难.206吧! - 我认为大多数客户都不会惊慌失措,但我宁愿不反对RFC中的MUST266 Partial Content - 行为与206完全相同,但是响应于不得包含Range …Django中是否存在HTTP字节范围的现有实现?即当客户端发送Range:标头时,我希望我的Django应用程序接受它并使用HTTP"206 Partial Content"响应进行回复.
我可以从头开始写东西,但肯定有人已经这样做了吗?
这有很多部分:
当然至少(1)和(4)在哪里有图书馆支持?
我正在玩HTTP范围标题(规格).
根据我的理解,我可以设置文件ala的字节范围
0-199/2000
200-499/2000
500-799/2000
etc
Run Code Online (Sandbox Code Playgroud)
问题:
假设我只想访问文件的某些范围,是否可以指定这些范围,然后使用我收到的"不完整"数据?我正在玩过滤大型日志文件,所以我很好奇这样的事情会起作用.
感谢您的投入!
这与: 我应该如何在 RESTful Web 服务中实现 COUNT 动词?、在 Rest 集合中进行分页 以及使用带有除字节之外的范围说明符的 HTTP 范围标头?
实际上我认为这里的 -1 评级 anwser 是正确的/sf/answers/100429101/
一般来说,答案说您可以使用引用 sec 3.12 的自定义单位
range-unit = bytes-unit | other-range-unit
bytes-unit = "bytes"
other-range-unit = token
Run Code Online (Sandbox Code Playgroud)
然而,当您阅读 HTTP 规范时,请注意生产规则如下:
Content-Range = "Content-Range" ":" content-range-spec
content-range-spec = byte-content-range-spec
byte-content-range-spec = bytes-unit SP
byte-range-resp-spec "/"
( instance-length | "*" )
Run Code Online (Sandbox Code Playgroud)
标头规范仅引用第 3.12 节中的字节单位,而不是范围单位,因此我认为实际上在这里使用自定义单位是违反规范的。
我错过了什么还是流行的答案错了?
编辑:由于这可能不清楚,我的问题的要点是:rfc2616 sec14.16 仅引用字节单位。它从未提及范围单元,因此范围单元的生成与内容范围无关,因此只能使用字节单元。
我认为这最好地解决了我的担忧,尽管我需要一些时间来理解它(而且我想确保措辞有问题)。
这反映了这样一个事实:显然,第一组语法规则是专门用于解析的,第二组是用于生成 HTTP 请求的
感谢埃尔加顿
我正在使用此方法(WebClientClass)从Internet下载文件:
private Task DownloadUpdate(string url, string fileName)
{
var wc = new WebClient();
return wc.DownloadFileTaskAsync(new Uri(url), @"c:\download" + fileName);
}
Run Code Online (Sandbox Code Playgroud)
如何使用上述代码使下载恢复?
http ×4
http-headers ×3
rest ×2
api ×1
asynchronous ×1
c# ×1
django ×1
filtering ×1
javascript ×1
pagination ×1
range ×1