小编daf*_*tal的帖子

前置于一个千兆字节的文件

将单个字符添加到多GB文件(在我的实际情况下是40GB文件)中最有效的方法是什么.

执行此操作没有限制.这意味着它可以通过工具,shell脚本,任何编程语言的程序,......

performance file

10
推荐指数
1
解决办法
869
查看次数

在Rails应用程序中记录所有方法调用

有没有一种简单的方法来记录Rails应用程序中的所有方法调用?

我的主要用途是测试(和调试测试).我想拥有比堆栈跟踪更多的历史记录(例如,使用'-b'选项运行rspec时).

ruby rspec ruby-on-rails ruby-on-rails-3

8
推荐指数
1
解决办法
4149
查看次数

在REST调用中使用URI作为参数值的最佳实践

我正在设计一个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 uri restful-url

7
推荐指数
1
解决办法
1428
查看次数

在REST API中使用PUT进行更新时,我是否应该允许发送完整的结构?

我正在设计REST API,我想知道处理资源更新的推荐方法是什么.更具体地说,我将允许通过PUT资源进行更新,但我应该在PUT请求正文中允许什么?

  1. 始终是资源的完整结构?
  2. 始终是资源结构的子部分(已更改)?
  3. 两者结合?

例如,获取资源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)

rest http http-put

3
推荐指数
1
解决办法
1213
查看次数