Приложение Padrino с REST API

В приложении Padrino у меня есть контроллер сообщений с обычными маршрутами:

Blog::App.controllers :posts do

  get :index do
    ...
  end

  get :show, :with => :id do
    ...
  end

end

Это дает мне нормальный доступ к URL в пространстве имён сообщений

http://blog.dev/posts
http://blog.dev/posts/show/1

Теперь я хочу предоставить доступ через REST API по другому маршруту вне пространства имен, например:

http://blog.dev/api/v1/post/all
http://blog.dev/api/v1/post/1

Как я могу определить API для моего контроллера сообщений с маршрутами вне его обычного пространства имен?

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

В случае, если это должно быть сделано с контроллером API, мне интересно, какие гемы и / или соглашения обычно используются для этой задачи. В идеале я хотел бы что-то, что координирует различные версии API с текущим объектом модели.

1 ответ

Решение
Blog::App.controllers :posts, map: '/api/v1/posts' do

  get :index do
    ...
  end

end

И затем, если вы хотите добавить новые версии этого контроллера

Blog::App.controllers :v2_posts, map: '/api/v2/posts' do

  get :index do
    ...
  end

end

(Да, кажется, вы не можете иметь несколько файлов на одном контроллере с разными map ценности.)

Таким образом, это не будет работать (извините, если это работает, не работает, когда я пытался) правильно и вызовет проблемы:

Blog::App.controllers :posts, map: '/api/v1/posts' do

  get :index do
    ...
  end

end

Blog::App.controllers :posts, map: '/api/v2/posts' do

  get :index do
    ...
  end

end
Другие вопросы по тегам