【问题标题】:Padrino app with REST API带有 REST API 的 Padrino 应用程序
【发布时间】:2014-01-12 21:19:07
【问题描述】:

在 Padrino 应用程序中,我有一个带有常规路由的 posts 控制器:

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

如何为我的 posts 控制器定义 API,并使用其正常命名空间之外的路由?

我必须承认,我不确定我的方法是否通用。我可以定义一个新的 API V1 控制器,但在这种情况下,我将不得不在两个不同的地方复制关于 posts 的信息。

如果这应该使用 API 控制器来完成,我想知道该任务通常使用哪些 gems 和/或约定。理想情况下,我想要将不同 API 版本与当前模型对象协调的东西。

【问题讨论】:

  • This 是一个 Rails 教程。不过,我认为没有理由不能在您的情况下使用主要逻辑。
  • 您是客户端,API 应该是分开的。然后客户端可以调用 API 获取数据,而不是成为不同命名空间下的 API。

标签: ruby rest sinatra padrino


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-31
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多