【问题标题】:How can I pass an array with grape swagger ui?如何使用葡萄招摇 ui 传递数组?
【发布时间】:2014-05-28 19:23:55
【问题描述】:

我在下面定义了 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 配合使用的解决方案。

【问题讨论】:

  • 我遇到了同样的问题...

标签: ruby-on-rails ruby swagger swagger-ui


【解决方案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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      这是我使用字符串类型参数的方法

      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]

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

      【讨论】:

        【解决方案4】:

        最后我传递了一个 JSON 数组作为字符串。

        【讨论】:

        • 能否请您扩展您的答案/解决方案,并举例说明您的做法和方式
        猜你喜欢
        • 2016-02-23
        • 2022-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-23
        • 1970-01-01
        • 1970-01-01
        • 2015-06-13
        相关资源
        最近更新 更多