Ruby on rails 通过UI将数组传递给Swagger块参数

Ruby on rails 通过UI将数组传递给Swagger块参数,ruby-on-rails,arrays,ruby,swagger,Ruby On Rails,Arrays,Ruby,Swagger,是否可以使用UI将项目数组传递到swagger块中的单个参数中?我正在ruby\rails应用程序中使用它。请求的类型是GET 我有一个带有许多参数的搜索API。除一项设施外,所有这些都是单一价值。它接受一个项目数组,可以使用类似于下面所示的URL调用(下面的示例显示了传递的两个值1和2) 我的参数设置如下: # INDEX (API) swagger_path '/venues.json' do operation :get do parameter do key :n

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

我有一个带有许多参数的搜索API。除一项设施外,所有这些都是单一价值。它接受一个项目数组,可以使用类似于下面所示的URL调用(下面的示例显示了传递的两个值1和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中将数组作为参数传递时,例如[1],它会生成以下URL来调用API:

http://localhost:3000/api/venues/search?facilities=%5B1%5D
Swagger似乎将“[1]”转换为URI“%5B1%5D”,并将其作为参数值,这正是我希望它所做的。我希望,因为我将其设置为“数组”类型,所以它知道每次为数组的每个元素将参数名称设置为“facilities%5B%5D”

我想我缺少了一些关于数组的定义,但是找不到任何关于招摇块的文档

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

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


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

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

似乎您正在尝试重现post主体处理数组的方式。这可能会由于url编码问题而导致一些问题。您是否尝试过执行以下操作来指定数组

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

一些web服务器和管道将其视为一个数组,当您尝试访问“项”时,它将返回1、2、3和4。只是想一想。

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

似乎您正在尝试重现post主体处理数组的方式。这可能会由于url编码问题而导致一些问题。您是否尝试过执行以下操作来指定数组

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

一些web服务器和管道将其视为一个数组,当您尝试访问“项”时,它将返回1、2、3和4。只是想一想。

我试着像您在中所做的那样将它们分开,但这不起作用。当API收到这些值时,它只保留其中一个参数。例如..../api/Vinces/search.json?facilities=19&facilities=18在查询api接收到的参数时只使用最后的值:=>{“facilities”=>“18”,“format”=>“json”,“action”=>“search”,“controller”=>“api/v1/Vinces”}嗯。我个人使用的另一个技巧是为参数传递一个逗号delim列表。我不确定这是否是你愿意考虑的,但是只要你传递的数组是一个原始类型(即不是JSON对象或类似的东西),它应该像一个CHAMP那样工作。例如:GET/api/victions/search.json?facilities=18,19。然后在你的代码中,你需要将它分解成一个数组来处理它。我曾经考虑过这是一个选项,是的。修改代码以适应这种情况也不需要太多。如果知道将来是否可能,那会很有用,如果不可能,那么我至少可以改变我编写API的方式来考虑这一点。我可能会深入研究swagger背后的代码,看看是否能够解决它如何处理数组,因为其中可能有一些有用的东西。只是需要一天的空闲时间去做,这是棘手的部分;o) 感谢您抽出时间回复Jerrod。我暂时不回答这个问题,因为这个建议是一个变通办法。我试着像你在中所做的那样把它们分开,但没有用。当API收到这些值时,它只保留其中一个参数。例如..../api/Vinces/search.json?facilities=19&facilities=18在查询api接收到的参数时只使用最后的值:=>{“facilities”=>“18”,“format”=>“json”,“action”=>“search”,“controller”=>“api/v1/Vinces”}嗯。我个人使用的另一个技巧是为参数传递一个逗号delim列表。我不确定这是否是你愿意考虑的,但是只要你传递的数组是一个原始类型(即不是JSON对象或类似的东西),它应该像一个CHAMP那样工作。例如:GET/api/victions/search.json?facilities=18,19。然后在你的代码中,你需要将它分解成一个数组来处理它。我曾经考虑过这是一个选项,是的。修改代码以适应这种情况也不需要太多。如果知道将来是否可能,那会很有用,如果不可能,那么我至少可以改变我编写API的方式来考虑这一点。我可能会深入研究swagger背后的代码,看看是否能够解决它如何处理数组,因为其中可能有一些有用的东西。只是需要一天的空闲时间去做,这是棘手的部分;o) 感谢您抽出时间回复Jerrod。我暂时不回答这个问题,因为这个建议是一个解决办法。
http://localhost:3000/api/venues/search?facilities=%5B1%5D