【问题标题】:Passing array to Swagger block parameter via the UI通过 UI 将数组传递给 Swagger 块参数
【发布时间】:2016-04-28 20:44:48
【问题描述】:

是否可以使用 UI 将一组项目传递到 swagger 块中的单个参数中?我在 ruby​​ \ rails 应用程序中使用它。请求的类型是 GET。

我有一个带有多个参数的搜索 API。所有这些都是单一的价值,除了一个,设施。这接受一个项目数组,并且可以使用类似于下面显示的 URL 调用(下面的示例显示了两个值 1 和 2 正在传递)。

http://localhost:3000/api/venues/search.json?facilities%5B%5D=1&facilities%5B%5D=2

我的参数是这样设置的:

# INDEX (API)
swagger_path '/venues.json' do
  operation :get do
    parameter do
      key :name, :facilities
      key :in, :query
      key :description, 'Facilities.  This does not work.'
      key :type, :array
      key :required, false
    end
  end
end

当我在 swagger 中将数组作为参数传递时,EG [1] 它会生成以下 URL 来调用 API:

http://localhost:3000/api/venues/search?facilities=%5B1%5D

Swagger 似乎将“[1]”转换为 URI“%5B1%5D”,并将其作为我期望它执行的参数值。我希望因为我将它设置为一种“数组”类型,它会知道每次为数组的每个元素都将参数名称设置为“facilities%5B%5D”。

我想我错过了有关数组的一些定义,但找不到任何关于 swagger 块的文档可以提供帮助。

我看过一篇帖子,其中有人传递了一个逗号分隔的字符串,然后让 API 创建了一个数组来解决这个问题。

我所有的单值参数请求都按预期工作。

感谢任何帮助或建议。提前致谢。

【问题讨论】:

    标签: ruby-on-rails arrays ruby swagger


    【解决方案1】:

    Swagger UI 对您输入的值进行 URL 编码,因为使用了一些不受支持的字符(“[”和“]”)。当 URL 中的字符被评估为不是 url 中的本机字符时,它将被编码,发送到 Web 服务器,Web 服务器通常对其进行解码并将其交给您正在使用的任何管道。可以找到有效字符列表here

    您似乎正在尝试重现帖子正文如何处理数组。由于 url 编码问题,这可能会导致一些问题。您是否尝试过执行以下操作来指定数组?

    • 示例:GET /products?items=1&items=2&items=3&items=4

    一些网络服务器和管道将其视为一个数组,当您尝试访问“项目”时,它会返回,在本例中为 1、2、3 和 4。只是一个想法。

    【讨论】:

    • 我尝试像您所做的那样将它们分开,但这不起作用。当 API 接收到这些值时,它只保留这些参数之一。例如。 .../api/venues/search.json?facilities=19&facilities=18 仅在我查询 API 接收的参数时使用最后一个值:=> {"facilities"=>"18", "format"=>" json", "action"=>"search", "controller"=>"api/v1/venues"}
    • 嗯。好吧,我个人使用的另一个技巧是为参数传递一个逗号分隔列表。我不确定这是否是您愿意考虑的,但只要您传递的数组是原始类型(即不是 json 对象或类似的东西),它就应该像冠军一样工作。例如:GET /api/venues/search.json?facilities=18,19。然后在你的代码中你需要把它分解成一个数组来处理它。
    • 我认为这是一种选择,是的。更改代码以适应这一点也不需要太多。知道未来是否有可能会很有用,如果没有,那么我至少可以改变我编写 API 的方式来考虑这一点。我可能会深入研究 swagger 背后的代码,看看我是否能弄清楚如何它处理数组,因为其中可能有一些帮助。只需要一天的空闲时间来做这件事,这是棘手的部分;o) 感谢您抽出宝贵时间回复 Jerrod。我暂时不回答这个问题,因为这个建议可以解决。
    猜你喜欢
    • 1970-01-01
    • 2018-05-03
    • 2018-03-06
    • 1970-01-01
    • 2017-10-19
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多