我觉得下面三种是等价的,只要 content type 和 post data 的格式对应起来就 OK。
application/x-www-form-urlencoded + nested http params
application/json + json data
application/xml + xml data
还有就是服务器端处理各种格式用的工具不同,json 和 xml 都有各自的 parser 和 builder
而 nested http params 一般只有框架才支持,有些框架好像不支持,或者没有一个通用的标准,或者开发者自己都不知道有这样一个东西。
不过,Rails(或者说基于 Rack 的 ruby web framwork) 对 nested http params 支持特别友好,从 form 的生成到 parser/build:
>> Rack::Utils.parse_nested_query("a[]=1&a[]=2&b[c]=3&b[d]=4")
=> {"a"=>["1", "2"], "b"=>{"c"=>"3", "d"=>"4"}}
>> Rack::Utils.build_nested_query(:a => ["1", "2"], :b => {:c => "3"})
=> "a[]=1&a[]=2&b[c]=3"
好像还有一个区别是,不同 content type 请求,返回的结果的格式也是不同的(这个我也不确定...)