gpt4 book ai didi

ruby-on-rails - 如何路由到特定的自定义 Rails 5 API 版本?

转载 作者:行者123 更新时间:2023-12-04 05:55:50 25 4
gpt4 key购买 nike

我正在开发一个应用程序,它的后端是用 rails 5 api(测试版)编写的。

我的 API 会有一些版本,我正在使用这种方法来解决版本控制问题:

https://github.com/iamvery/rails-api-example/blob/master/config/routes.rb

Rails.application.routes.draw do
def api_version(version, &routes)
api_constraint = ApiConstraint.new(version: version)
scope(module: "v#{version}", constraints: api_constraint, &routes)
end

api_version(1) do
resources :articles, only: :index
end

api_version(2) do
resources :articles, only: :index
end
end

问题是当我没有指定版本时,它会向我显示一个(明显的)错误( ActionController::RoutingError: No route matches [GET] \... )。

但我想使用最新的 api 版本进行路由,而不是抛出错误。

最佳答案

您的 routes.rb 文件

Rails.application.routes.draw do
scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do
# Then for a new version create a new scope
end
end

app/lib 中创建一个新的 api_constraints.rb 文件目录
class ApiConstraints
def initialize(options)
@version = options[:version]
@default = options[:default]
end
def matches?(req)
@default || req.headers['Accept'].include?("application/vnd.marketplace.v#{@version}")
end
end

关于ruby-on-rails - 如何路由到特定的自定义 Rails 5 API 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35382450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com