ruby-on-rails – 如何编写rails路由来映射带有主要版本和次要版
发布时间:2020-12-17 03:15:42 所属栏目:百科 来源:网络整理
导读:我已经阅读了这个 Best practices for API versioning?.我同意将该版本放在url路径而不是HTTP头中. 为了实现这一点,我有一个像这样的命名空间控制器: class Api::V1::UsersController Api::BaseController def show ... endend 路线是: current_api_routes
我已经阅读了这个
Best practices for API versioning?.我同意将该版本放在url路径而不是HTTP头中.
为了实现这一点,我有一个像这样的命名空间控制器: class Api::V1::UsersController < Api::BaseController def show ... end end 路线是: current_api_routes = lambda do resource :users end namespace :api do namespace :v1,¤t_api_routes end 然后耙路线我可以得到这样的路线: api_v1_user GET /api/v1/users/:id(.:format) api/v1/users#show ... 我希望版本v1.2转到v1的控制器.然后我可以在控制器中得到次要版本号,如下所示: class Api::V1::UsersController < Api::BaseController def show minor_version = params[:minor_version] # minor_version = 2 ... end end 有没有办法实现这个目标? 解决方法
我们正在使用次要的API版本控制,但很小但可能会破坏更改(例如,允许以前不允许的属性的空值).
# config/routes.rb My::Application.routes.draw do namespace :api do scope "v:api_version",module: "v1",as: "v1",constraints: { api_version: /1(.[0123]?)/ } do resources :users end end end # app/controllers/api/application_controller.rb class API::ApplicationController < ActionController::Base private def api_version @api_version ||= begin major,minor = params[:api_version].split('.',2).map(&:to_i) OpenStruct.new(major: major,minor: minor || 0) end end end # app/controllers/api/v1/users_controller.rb class API::V1::UsersController < API::ApplicationController def show # ... something_more if api_version.minor >= 2 end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |