Приложение 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