【发布时间】:2021-02-18 12:37:35
【问题描述】:
我正在按照本教程设置我的 Rails API 服务器:building-awesome-rails-apis-part-1
一切都很好,除了提到不需要在路由中指示命名空间的部分。例如。
现在我们的 URL 看起来像:
http://api.example.com/v1/people或者只是http://api.example.com/people如果你不使用版本,它 不会干扰你的普通人的路线,而且看起来很棒。
当我调用 http://api.mydomain.com/v1/therapists/ 时它可以工作,但是当我尝试在 URL 中省略 v1 命名空间时它不起作用,我需要做任何额外的配置吗?
我正在使用Rails 6.0.3.4
这是我具体的 routes.rb 文件:
Rails.application.routes.draw do
namespace :api, :path => "", :constraints => {:subdomain => "api"} do
namespace :v1 do
resources :therapists do
resources :appointments
end
end
end
end
解决方案
按照 zhisme 的建议,我使用 rack-rewrite gem 来做我想做的事情。
首先,我将 gem 添加到我的 Gemfile 中:
gem 'rack-rewrite', '~> 1.5', '>= 1.5.1'
之后我在config/application.rb文件中添加了配置
config.middleware.insert_before(Rack::Runtime, Rack::Rewrite) do
rewrite '/therapists', '/v1/therapists'
end
它奏效了。
【问题讨论】:
标签: ruby-on-rails ruby api namespaces