如何通过配置更改管理不同版本的 Rails API

问题描述

我目前有一个带有命名空间路由的 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...