现在我的API接受?a[]=x&a[]=y
之类的请求,使用:
params do
requires :a, type: Array[String]
end
我的客户端只能将查询参数发送为?a[0]=x&a[1]=y
,而Grape
是否无法同时使用Grape接受a[]
和a[0]
?另一种选择是首先向另一台服务器发送请求,从a[0]
转换为a[]
,将该请求发送给Grape,从Grape获取响应并将其发送给客户端,这看起来真的没必要。
答案 0 :(得分:0)
更多的是使用Rack而不是Grape。 Rack解析查询字符串的方式,看看
rack-1.6.4 / lib / rack / utils.rb
$this->members = $members;
def parse_nested_query(qs, d = nil)
params = KeySpaceConstrainedParams.new
(qs || '').split(d ? /[#{d}] */n : DEFAULT_SEP).each do |p|
k, v = p.split('=', 2).map { |s| unescape(s) }
normalize_params(params, k, v)
end
return params.to_params_hash
rescue ArgumentError => e
raise InvalidParameterError, e.message
end
会生成哈希?a[0]=x&a[1]=y
,基于=> {"a"=>{"0"=>"x", "1"=>"y"}}
无效。
虽然非指定版本params
会生成数组?a[]=x&a[]=y
有关@see http://codefol.io/posts/How-Does-Rack-Parse-Query-Params-With-parse-nested-query
的一些重要信息