好奇我将如何制作一个使用基本身份验证或API密钥的Rails API,嵌套在Rails Web应用程序中。
我分别了解网站的制作和API。但是,我希望他们成为同一个软件包的一部分(缺少一个更好的术语)
例如,这是否有效(文件夹结构)
\app
\app\controllers
\app\... models views etc
\api\app\controllers
\api\app\.. models views etc
所以我可以使用链接http:\\localhost\customers\1
或http:\\localhost\api\customers\1
这样可以公开API,但使用与Web应用程序相同的数据模型。
或者我是以错误的方式解决这个问题,并且有一个更好的方法?
我正在使用rails 3,如果它有所作为,但更多的是寻找如何解决这个问题的想法。我找不到architecture-overflow.com
:)
答案 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控制器,它就是这样做的。
这背后的原因是:
大多数复制都是通过重用模型来处理的。 我不完全确定是否有更好的方法,但对我们来说这感觉就像一个好方法。
现在我们的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的嵌套文件夹创建各自的控制器和视图,如上所示。