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