2016-01-22 166 views
1

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

我有一个搜索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 

当我传递数组作为招摇的参数,EG [1]它生成以下URL调用API:

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

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

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

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

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

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

回答

0

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

看起来好像你正在试图重现一个帖子主体如何处理数组。这可能会导致一些问题,由于网址编码问题。你有没有尝试做以下指定一个数组?

  • 实施例:GET /产品项= 1 &项= 2 &项= 3 &项= 4台

一些web服务器和管道将此视为一个阵列,并且当试图访问“项目“它返回,在这种情况下,1,2,3和4.只是一个想法。

+0

我试图将它们拆分出来,就像你在做但不起作用。当API收到值时,它只保留其中一个参数。例如。 .../api/venues/search.json?facilities = 19&facilities = 18当我查询API接收的参数时,它只使用最后一个值: => {“facilities”=>“18”,“format”=> “json”,“action”=>“search”,“controller”=>“api/v1/venues”} –

+0

嗯。那么,我个人使用的另一个技巧是传递参数的逗号分隔列表。我不确定这是否你愿意考虑,但只要你传递的数组是一个原始类型(即不是JSON对象或类似的东西),它应该像冠军一样工作。例如:GET /api/venues/search.json?facilities=18,19。然后在你的代码中,你需要把它分解成一个数组来处理它。 –

+0

我曾考虑过,作为一种选择,是的。改变代码以适应这一点也不需要太多。知道未来是否有可能是有用的,如果不是,那么我至少可以改变我编写我的API的方式来将它考虑进去。我可能会深入研究背后的代码,看看我能否研究如何它处理数组,因为那里可能有些东西有帮助。只需要一个空闲的时间去做,这是一个棘手的部分; o)感谢您花时间回复杰罗德。我会暂时解决这个问题,因为这个建议是一个解决方法。 –