Rails API方法级别版本控制

5
在.NET中,我们可以通过注释方法来对API进行版本控制,并且只复制不同版本之间不同的方法。我转换到使用Rails的产品团队,并试图找出是否有任何帮助我在Rails中完成这个任务的工具。到目前为止,我看到的所有东西都建议在一个模块中为整个控制器添加V1、V2等命名空间,即使只有一个方法在V1和V2之间不同,也可以大大减少必须复制的内容数量。
谢谢。
1个回答

3

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

非常感谢,这太棒了。 - fogwolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接