Как я могу передать массив с помощью Grape swagger ui?

у меня есть определение конечной точки api ниже:

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

Я не могу передать массив формы пользовательского интерфейса, созданного Swagger. Если я войду [1, 2, 3, 4] или ids%5b%5d=1&ids%5b%5d=2&ids%5b%5d=3 затем оба становятся недействительными. Если я вызываю api из спецификации с массивом, он работает. Мой клиент хотел бы попробовать весь api от Swagger, поэтому я хотел бы решение, которое работает с Swagger UI.

3 ответов


просто чтобы уточнить, что говорил Боти, я думаю, он имел в виду, что он изменил тип для массива param на string и отправил строку массива JSON - значение "[1,2,3]". Это не идеально, очевидно, но это сработает, если вы проанализируете его на стороне API. Значит, парамы будут ... --3-->

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

чтобы быть ясным, это проблема с Swagger UI, работающим с grape-swagger, тем более, что Grape Swagger поддерживает только Swagger 1.2. Виноград чванство проблема отправки правильном формате массив для Swagger (см. этот вопрос Github). Grape отлично справится с типом массива, вы просто не сможете протестировать его в Swagger-UI.

для нашего проекта мы просто не использовали Swagger для этого параметра. Я бы предпочел, чтобы платформа тестирования (Swagger-UI) работала неправильно, чем редактировать в противном случае правильный код в фактическом продукте.


вот как я это сделал со строковым типом params

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]

это может быть не хороший подход, но может быть альтернативой.


наконец, я передал массив JSON как строку.