使用REST API的Padrino应用程序

时间:2013-12-24 16:43:10

标签: ruby rest sinatra padrino

在Padrino应用程序中,我有一个帖子控制器与传统路线:

Blog::App.controllers :posts do

  get :index do
    ...
  end

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

end

因此,这为我提供了帖子命名空间

中的正常网址访问权限
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 个答案:

答案 0 :(得分:2)

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