将单个字符添加到多GB文件(在我的实际情况下是40GB文件)中最有效的方法是什么.
执行此操作没有限制.这意味着它可以通过工具,shell脚本,任何编程语言的程序,......
有没有一种简单的方法来记录Rails应用程序中的所有方法调用?
我的主要用途是测试(和调试测试).我想拥有比堆栈跟踪更多的历史记录(例如,使用'-b'选项运行rspec时).
我正在设计一个REST API,其中一些资源可以通过查询参数进行过滤.在某些情况下,这些过滤器值将是来自同一REST API的资源.这会产生冗长且非常难以理解的URI.虽然这本身并不是一个问题,因为URI意味着以编程方式创建和操作,但它会导致一些痛苦的调试.我正在考虑允许用作过滤器值的URI的快捷方式,我想知道这是否允许根据REST架构以及是否有任何最佳实践.
例如:
我有一个资源,让我获得Java类.然后,以下请求将为我提供所有Java类:
GET http://example.org/api/v1/class
Run Code Online (Sandbox Code Playgroud)
假设我想要CollectionJava类的所有子类,那么我将使用以下请求:
GET http://example.org/api/v1/class?has-supertype=http://example.org/api/v1/class/collection
Run Code Online (Sandbox Code Playgroud)
该请求将返回我Vector,ArrayList以及CollectionJava类的所有其他子类.
那个URI虽然很长.我可以通过允许hs作为别名来缩短它has-supertype.这会给我:
GET http://example.org/api/v1/class?hs=http://example.org/api/v1/class/collection
Run Code Online (Sandbox Code Playgroud)
允许更短URI的另一种方法是允许URI前缀的别名.例如,我可以定义class为URI前缀的别名http://example.org/api/v1/class/.这会给我以下可能性:
GET http://example.org/api/v1/class?hs=class:collection
Run Code Online (Sandbox Code Playgroud)
另一种可能性是完全删除类别名并始终为参数值添加前缀,http://example.org/api/v1/class/因为这是我唯一支持的内容.这会将所有子类型的请求Collection转换为:
GET http://example.org/api/v1/class?hs=collection
Run Code Online (Sandbox Code Playgroud)
原始请求URI的这些"简化"是否仍然符合REST架构的原则?或者我刚刚离开了深渊?
ADDENDUM:URI中可能同时有多个过滤器.可以是不同的参数,也可以是单个参数的值列表.按照"实现接口X和/或接口Y的所有类"或"实现接口X并且在ABC包中的所有类"的方式思考(其中包也可以像URI一样寻址http://example.org/api/v1/packages/a/b/c)
我正在设计REST API,我想知道处理资源更新的推荐方法是什么.更具体地说,我将允许通过PUT资源进行更新,但我应该在PUT请求正文中允许什么?
例如,获取资源http://example.org/api/v1/dogs/packs/p1.GET此资源上的A 将提供以下内容:
Request:
GET http://example.org/api/v1/dogs/packs/p1
Accept: application/xml
Response:
<pack>
<owner>David</owner>
<dogs>
<dog>
<name>Woofer</name>
<breed>Basset Hound</breed>
</dog>
<dog>
<name>Mr. Bones</name>
<breed>Basset Hound</breed>
</dog>
</dogs>
</pack>
Run Code Online (Sandbox Code Playgroud)
假设我想要添加一只狗(Sniffers the Basset Hound),我会支持:
Request:
PUT http://example.org/api/v1/dogs/packs/p1
<dog>
<name>Sniffers</name>
<breed>Basset Hound</breed>
</dog>
Response:
HTTP/1.1 200 OK
Run Code Online (Sandbox Code Playgroud)
要么
Request:
PUT http://example.org/api/v1/dogs/packs/p1
<pack>
<owner>David</owner>
<dogs>
<dog>
<name>Woofer</name>
<breed>Basset Hound</breed>
</dog>
<dog>
<name>Mr. Bones</name>
<breed>Basset Hound</breed>
</dog>
<dog>
<name>Sniffers</name>
<breed>Basset Hound</breed>
</dog>
</dogs>
</pack>
Response:
HTTP/1.1 …Run Code Online (Sandbox Code Playgroud)