Как я могу передать массив с помощью 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]
это может быть не хороший подход, но может быть альтернативой.