ruby-on-rails - Rails 3.1 API 路由

标签 ruby-on-rails ruby ruby-on-rails-3 routing

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

www.example.com/controller/action // Normal Web requests
api.example.com/controller/action.json // API requests

第一个用于正常请求,另一个显然用于我的 API 内容。我希望这两个都映射到同一个 Controller / Action 。

如何设置我的应用程序,使其在 www 上时仅响应 HTML,而在 api 子域上时仅响应 json、xml 等?

最佳答案

最简单的方法 (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

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

关于ruby-on-rails - Rails 3.1 API 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8143487/

相关文章:

ruby-on-rails - 使用 Devise 时未定义的方法 confirmed_at

ruby - 如何在 Windows 上编译 Ruby?

ruby-on-rails - rails 3 中的部分形式需要不同的链接,具体取决于新建或编辑

ruby-on-rails - 为 seeds.rb 编写规范

mysql - Rails 中日期查询不返回边界日期数据

ruby - 学习如何在 ruby​​ 中设计好的 API 包装器的资源

ruby - 字符串中的 Rails 3 link_to

ruby-on-rails - Rails 3,什么是最好的行为树行为?

ruby-on-rails - 在数据库上找到用户时如何取消Devise查询的作用域

ruby-on-rails - 由于 readline 错误,无法执行 "rails console"