Rails 3.1 API路由

Kyl*_*cot 6 ruby routing ruby-on-rails ruby-on-rails-3

我有一个Rails 3.1应用程序,我想为其创建一个API.我希望我的网址看起来像:

www.example.com/controller/action // Normal Web requests
api.example.com/controller/action.json // API requests
Run Code Online (Sandbox Code Playgroud)

第一个用于正常请求,另一个用于我的API.我希望这两个映射到相同的控制器/动作.

当我在api子域上时,如何设置我的应用程序以便它只在www和json,xml等上响应HTML?

Zar*_*ony 21

最简单的方法(imo)是使用Rails 3路由约束.在config/routes.rb中,使用:

constraints :subdomain => 'www', :format => :html do
  # Routing for normal web requests
  match 'mycontroller/:action' => 'mycontroller#index'
  # ...
end

constraints :subdomain => 'api', :format => :json do
  # Routing for API requests
  match 'mycontroller/:action.:format' => 'mycontroller#index'
  # ...
end
Run Code Online (Sandbox Code Playgroud)

您可能还想查看respond_with(以及类级别的respond_to),这使得编写响应多种格式的控制器比使用传统的respond_to更容易.