编写嵌套到RoR站点的RoR API

时间:2011-09-09 06:35:19

标签: ruby-on-rails

好奇我将如何制作一个使用基本身份验证或API密钥的Rails API,嵌套在Rails Web应用程序中。

我分别了解网站的制作和API。但是,我希望他们成为同一个软件包的一部分(缺少一个更好的术语)

例如,这是否有效(文件夹结构)

\app
\app\controllers
\app\... models views etc
\api\app\controllers
\api\app\.. models views etc

所以我可以使用链接http:\\localhost\customers\1http:\\localhost\api\customers\1

这样可以公开API,但使用与Web应用程序相同的数据模型。

或者我是以错误的方式解决这个问题,并且有一个更好的方法?

我正在使用rails 3,如果它有所作为,但更多的是寻找如何解决这个问题的想法。我找不到architecture-overflow.com:)

3 个答案:

答案 0 :(得分:2)

您可以使用名称空间路由功能:

namespace :api do
  resources :customers
end

resources :customers

这将允许您将应用中的目录映射为:

app/controllers/customer_controller.rb
app/controllers/api/customer_controller.rb
app/models/customer.rb
app/views/customers/index.html.erb
app/views/api/customers/index.json.erb
... etc ...

答案 1 :(得分:2)

这是一个非常有趣的问题,我们也尝试在我们的应用程序中解决这个问题。似乎没有标准的'Rails'方式(尚)。

对于我们希望通过API公开的每个资源,我们创建了一个新的API控制器,它就是这样做的。

这背后的原因是:

  • UI和API之间的错误处理有所不同:
    • 用户界面:是否重定向,并显示信息闪烁
    • API:在xml / json
    • 中返回清除错误代码和消息
  • API中的代码大部分时间都比较简单,但错误处理更精细,因为参数是由第三方填写的(更多可能出错)
  • UI中的代码可能需要从不同来源收集数据以在UI上显示(不是纯粹的资源)
  • 代码更清晰,虽然有一些重复

大多数复制都是通过重用模型来处理的。 我不完全确定是否有更好的方法,但对我们来说这感觉就像一个好方法。

现在我们的API是纯xml,我们现在正在努力找到一种干净的方法让我们的API干净地呈现xml和json对象。我们在API中作为资源显示的模型都具有特定的to_xml方法(选择列并呈现指向相关资源的链接)。

希望这会有所帮助。

答案 2 :(得分:0)

您可以像这样创建RESTFUL API

  namespace :api, defaults: {format: 'json'} do
    resources :stores do
      collection do
        post :check_token
      end
    end
  end

现在,您可以使用名称为api的嵌套文件夹创建各自的控制器和视图,如上所示。