Ruby Grape API的数组查询参数

时间:2015-12-14 00:41:27

标签: ruby grape grape-api

现在我的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获取响应并将其发送给客户端,这看起来真的没必要。

1 个答案:

答案 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

的一些重要信息