6

我在下面定义了 api 端点:

params do
  requires :ids, type: Array, desc: 'Array of group ids'
end

我无法从 Swagger 生成的 UI 中传递数组。如果我输入[1, 2, 3, 4]ids%5b%5d=1&ids%5b%5d=2&ids%5b%5d=3然后两者都无效。如果我使用数组从规范调用 api,它就可以工作。我的客户想尝试 Swagger 的整个 api,所以我想要一个适用于 Swagger UI 的解决方案。

4

4 回答 4

1

我对所有情况的解决方案:

params do
  requires :ids, type: Array[Integer], desc: 'Array of group ids', 
           coerce_with: -> { |val| (val.is_a?(Array) ? val : val.to_s.split(',').map(&:strip)).map(&:to_i) }
end
于 2020-09-24T13:05:50.670 回答
0

只是为了澄清 Boti 在说什么,我认为他的意思是他将数组参数的类型更改为字符串,并发送了一个 JSON 数组的字符串 - 含义"[1,2,3]"。显然,这并不理想,但如果您在 API 端解析它,它会起作用。所以参数将是 -

params do 
  requires :ids, type: String, desc: 'Array of group ids'
end

需要明确的是,这是 Swagger UI 与 grape-swagger 一起使用的问题,特别是因为 Grape Swagger 仅支持 Swagger 1.2。Grape Swagger 在将数组的正确格式发送到 Swagger 时遇到问题(请参阅此 Github 问题)。Grape 可以很好地处理 Array 类型,您将无法在 Swagger-UI 中对其进行测试。

对于我们的项目,我们只是没有为这个参数使用 Swagger。我宁愿测试平台(Swagger-UI)不能正常工作,也不愿在实际产品中编辑其他正确的代码。

于 2015-05-08T03:37:25.100 回答
-1

这是我使用 String 类型参数的方法

params do
  requires :array, type: String
end

post 'test_array' do
  params[:array] = params[:array].split(',')
end

然后在 Swagger UI 中,我可以像这样传递一个字符串来模拟数组。

item1. item2. item3代替[item1. item2. item3]

这可能不是一个好方法,但可以作为替代方法。

于 2017-07-14T07:42:17.847 回答
-3

最后,我将 JSON 数组作为字符串传递。

于 2014-09-22T14:32:50.743 回答