问题描述
我目前有一个带有命名空间路由的 Rails 5 API:/api/v1/...
我想发布一个新版本(/api/v2/...)
使用不同的身份验证/CORS 配置。具体来说,v1 使用凭据身份验证。但在 v2 中我想切换到令牌。
我想申请 v2 的更改的快速概览:
# Gemfile
gem rack-cors
# config/application.rb
config.middleware.insert_before 0,Rack::Cors do
allow do
origins '*'
resource '*',headers: :any,methods: [:get,:post,:options],credentials: false
end
end
请注意,默认情况下 credentials
选项处于禁用状态。 v1 依赖于此进行身份验证。换句话说,v2 正在禁用 v1 需要启用的配置。
我对管理不同环境的不同配置非常熟悉。但我有兴趣根据路线做同样的事情。
/api/v1/...
--> 配置 A
/api/v2/...
--> 配置 B
这可能吗?我发现 Rollout gem 似乎可能做我需要的,但我不确定。
如果有更好的方法来解决这个问题,我愿意接受替代方案。世界末日的场景是让我站起来另一个 API 实例来运行新的 API 版本,但我非常想避免这种情况!
解决方法
如果您想要基于路由的不同中间件,您可以使用 Rails 引擎或在中间件中使用正则表达式。这已经在这里讨论过Execute Rack Middleware for Specific Routes in Rails