Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 带RESTAPI的Padrino应用程序_Ruby_Rest_Sinatra_Padrino - Fatal编程技术网

Ruby 带RESTAPI的Padrino应用程序

Ruby 带RESTAPI的Padrino应用程序,ruby,rest,sinatra,padrino,Ruby,Rest,Sinatra,Padrino,在Padrino应用程序中,我有一个POST控制器,具有常规路线: Blog::App.controllers :posts do get :index do ... end get :show, :with => :id do ... end end 因此,这为我提供了posts命名空间内的正常URL访问 http://blog.dev/posts http://blog.dev/posts/show/1 现在,我想通过REST API从名称空间

在Padrino应用程序中,我有一个POST控制器,具有常规路线:

Blog::App.controllers :posts do

  get :index do
    ...
  end

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

end
因此,这为我提供了posts命名空间内的正常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控制器来完成,我想知道这项任务通常使用哪些GEM和/或约定。理想情况下,我希望能够使用当前模型对象协调不同的API版本

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

这是一个rails教程。不过,我看不出有什么理由不能在您的案例中使用主逻辑。您的客户端和API应该是分开的。然后,客户机可以为数据调用API,而不是作为不同命名空间下的API。