Ada*_*sek 7 ruby middleware conventions query-parameters
Rails和其他框架使用了一块Ruby中间件来解析您发送到服务器的参数到嵌套Hash对象中.
如果将这些参数发送到服务器:
person[id] = 1
person[name] = Joe Blow
person[email] = joe.blow@test.com
person[address][street_address] = 123 Somewhere St.
person[address][city] = Chicago
person[address][zip] = 12345
person[other_field][] = 1
person[other_field][] = 2
person[other_field][] = 3
Run Code Online (Sandbox Code Playgroud)
他们被解析为:
{
:person => {
:id => "1",
:name => "Joe Blow",
:email => "joe.blow@test.com",
:address => {
:street_address => "123 Somewhere St.",
:city => "Chicago",
:state => "IL",
:zip => "12345"
},
:other_field => [ 1, 2, 3 ]
}
}
Run Code Online (Sandbox Code Playgroud)
我相信PHP也支持这一点.任何人都可以告诉我这个约定叫什么,它来自哪里,以及其他语言支持它?(Perl,Python等)
我试图找出这个约定是否有名称,但我还没找到它.
对于它的价值,在Ruby中执行此操作的中间件是Rack::Utils.请参阅Github上的源代码.
Ruby on Rails指南中有关于该主题的更多信息.
这是一个有趣的票据,关于代码从Rails转移到Rack中间件.
我已经在PHP源代码中进行了一些挖掘,似乎所有的魔法都发生在main/php_variables.c源文件中.该SAPI代码调用php_std_post_handler这里定义的方法.这最终调用了这个php_register_variable_ex方法,这是在C中用185行复杂的字符串解析(我必须承认C不是我的强项).
我能找到这里唯一的名称是php_std_post_handler,在PHP标准POST处理程序.
在Python中,默认情况下不支持此格式.有关此主题,请参阅stackoverflow.com上的此问题.
CGIPerl中的库也不支持这种格式.它确实可以轻松访问单个或多个值,但不能像示例中那样访问嵌套值.查看文档feching一个命名参数的值或值和获取的参数列表作为哈希.
检查出的查询参数解析的对象激烈争论这个问题.默认情况下,Java不会将POST参数的这种"嵌套格式"解析为数据结构.
我已经研究了这个,并没有找到这种参数解析方式的单一名称.在我研究过的语言中,只有Ruby和PHP本身支持这种格式.