Wildcard маршрут в Винограде

У меня возникли проблемы с тем, чтобы заставить Grape отвечать на маршрут с использованием подстановочных знаков.

Под этим я подразумеваю, что если у меня есть простой маршрут, определенный как

get do
...
end

Мне нужно ответить на все потенциальные запросы к API. Ситуация такова, что мне нужно проанализировать путь и параметры, а затем проработать дерево решений на основе этих значений.

Я пробовал несколько вариантов определения маршрута, например:

get '/*' do
...
end

get '/(*)' do
...
end

Но безрезультатно.

Я знаю, что в Grape есть некоторая поддержка регулярных выражений и привязки маршрутов, но мне не повезло разобраться с этим.

Спасибо!


person sheppe    schedule 04.06.2015    source источник


Ответы (1)


Вы были близки к предположению о синтаксисе, вам просто нужно назвать соответствующий параметр:

E.g.

  get '*thing' do
    { :thing => params[:thing] }
  end

Использование * заставит параметр захватить остальную часть пути URI, игнорируя разделители /. Но в остальном он ведет себя так же, как и любой другой параметр.

Обратите внимание, что в лучшем случае это будет происходить только в точке монтажа в стойке, поэтому, если у вас есть

  prefix      'api'
  version     'v2'

тогда он будет реагировать на такие пути, как /api/v2/hkfhqk/fwggw/ewfewg

Если вы используете это для пользовательских 404 или других универсальных маршрутов, вам нужно добавить его в конце, иначе он будет маскировать более конкретные маршруты.

person Neil Slater    schedule 04.06.2015