【问题标题】:Rails - Parameter with multiple values in the URL when consuming an API via Active ResourceRails - 通过 Active Resource 使用 API 时 URL 中具有多个值的参数
【发布时间】:2012-03-31 14:04:16
【问题描述】:

我正在使用一个 API,它希望我按照以下格式执行请求:

?filter=value1&filter=value2

但是,我使用的是 Active Resource,当我指定 :params 哈希时,我无法使相同的参数在 URL 中出现两次,我认为这是正确的。所以我不能这样做:

:params => {:consumer_id => self.id, :filter => "value1", :filter => "value2" },因为哈希的第二个过滤器索引将被忽略。

我知道我可以像这样传递一个数组(我相信这是正确的做法):

:params => {:consumer_id => self.id, :filter => ["value1","value2"] }

这将产生如下 URL:

?filter[]=value1&filter[]=value2

这对我来说似乎没问题,但 API 不接受它。所以我的问题是:

传递多值参数的正确方法是什么?是特定语言的吗?谁来决定这个?

【问题讨论】:

  • 我有点困惑。 “过滤器”怎么会有两个不同的值?
  • 对不起,我的意思是,它看起来像API的编写方式,过滤器值将被最后传递的值覆盖。
  • @fatfrog 我不知道 API 是如何编写的,我只是根据他们的规范获取数据。但正如您所知,API 能够在传递两个值时获取它们,例如 ?filter=value1&filter=value2
  • 好的更新了我的答案-根据文档,要发送一个值数组,请将一对空的方括号“[]”附加到键名。
  • @fatfrog 你还没有写任何答案。另外,请阅读我的问题。您参考了哪些文档?

标签: ruby-on-rails api url w3c


【解决方案1】:

【讨论】:

    【解决方案2】:

    要创建一个有效的查询字符串,你可以使用

    params = {a: 1, b: [1,2]}.to_query

    http://apidock.com/rails/Hash/to_query
    http://apidock.com/rails/Hash/to_param

    【讨论】:

      【解决方案3】:

      您可以通过创建允许重复键的哈希来生成包含重复参数的查询字符串。 因为这依赖于使用对象 ID 作为哈希键,所以您需要使用字符串而不是符号,至少对于重复键。

      (参考:Ruby Hash with duplicate keys?

      params = { consumer_id: 1 } # replace with self.id
      params.compare_by_identity
      params["filter"] = "value1"
      params["filter"] = "value2"
      params.to_query #=> "consumer_id=1&filter=value1&filter=value2"
      

      【讨论】:

        猜你喜欢
        • 2011-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-10
        • 1970-01-01
        • 1970-01-01
        • 2020-12-16
        相关资源
        最近更新 更多