Ruby on rails 方法级别的Rails API版本控制

Ruby on rails 方法级别的Rails API版本控制,ruby-on-rails,api,versioning,rails-api,Ruby On Rails,Api,Versioning,Rails Api,在.NET中,我们能够通过注释API并只复制不同版本之间的方法,在方法级别对API进行版本化。我已经转到了一个使用Rails的产品团队,并试图找出是否有什么可以帮助我在Rails中做到这一点。到目前为止,我所看到的一切都建议在一个模块中使用V1、V2等命名整个控制器的名称空间。。。假设V1和V2之间只有一种方法不同,这就有可能大大减少必要的复制量 谢谢。Ruby是一种非常灵活和丰富的语言,应该不难避免代码重复 管理问题的一个简单而肮脏的方法是通过采取适当的行动。在.NET中,您实际上通过注释方法

在.NET中,我们能够通过注释API并只复制不同版本之间的方法,在方法级别对API进行版本化。我已经转到了一个使用Rails的产品团队,并试图找出是否有什么可以帮助我在Rails中做到这一点。到目前为止,我所看到的一切都建议在一个模块中使用V1、V2等命名整个控制器的名称空间。。。假设V1和V2之间只有一种方法不同,这就有可能大大减少必要的复制量


谢谢。

Ruby是一种非常灵活和丰富的语言,应该不难避免代码重复

管理问题的一个简单而肮脏的方法是通过采取适当的行动。在.NET中,您实际上通过注释方法而不是使用任何特殊的语言功能来路由请求

# API::V2 implements only special_method
get '/api/v2/special_method', controller: 'API::V2', action: 'special_method' 

# all other actions from V2 are processed by V1
mount API::V1 => '/api/v1'
mount API::V1 => '/api/v2'
另一种更高级的方法是使用模块实现控制器操作(实例方法)。然后,您可以重用API V2中的同一模块,并重写那些需要更改的方法

class API::V1
  # implementaton of API::V1
  include ImplV1
end

class API::V2
  # all the methods from V1 are available in V2 too
  include ImplV1

  # override methods from V1 here
  include ImplV2
end
最后,一种更直接但不太灵活的方法是直接从V1继承V2:

class API::V2 < API::V1
  def special_method
    # ...
  end
end
类API::V2
非常感谢,这太棒了。