Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby葡萄API的数组查询参数_Ruby_Grape_Grape Api - Fatal编程技术网

Ruby葡萄API的数组查询参数

Ruby葡萄API的数组查询参数,ruby,grape,grape-api,Ruby,Grape,Grape Api,现在,我的API通过以下方式接受请求,例如?a[]=x&a[]=y: params do requires :a, type: Array[String] end 我的客户端只能将查询参数发送为葡萄不理解的?a[0]=x&a[1]=y,导致400(错误请求) 是否不能同时接受a[]和a[0]?另一种选择是首先向另一台服务器发送请求,从a[0]转换为a[],将该请求发送给Grape,从Grape获得响应并将其发送给客户端,这似乎真的是不必要的。这更多地与机架有关,而不是与Grape有关。这是

现在,我的API通过以下方式接受请求,例如
?a[]=x&a[]=y

params do
  requires :a, type: Array[String]
end
我的客户端只能将查询参数发送为葡萄不理解的
?a[0]=x&a[1]=y
,导致400(错误请求)


是否不能同时接受
a[]
a[0]
?另一种选择是首先向另一台服务器发送请求,从
a[0]
转换为
a[]
,将该请求发送给Grape,从Grape获得响应并将其发送给客户端,这似乎真的是不必要的。

这更多地与机架有关,而不是与Grape有关。这是Rack解析查询字符串的方式,请看

rack-1.6.4/lib/rack/utils.rb

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”}
,该哈希值无效

而非标记版本
?a[]=x&a[]=y
生成一个数组
{“a”=>[“1”、“2”]}


有关@see

的一些重要信息,请参阅是什么阻止您的客户端生成此类URL?我无法找到使用库将索引更改为括号的方法,因此可能更容易将Grape更改为更灵活的方式。当然,我可以自己构造参数,但我认为库应该处理这个问题。Qs()可以处理这个问题,例如,很容易地指定括号或索引(但是我不使用Qs)。