方法级别的Rails API版本控制

时间:2015-09-29 17:26:01

标签: ruby-on-rails api versioning rails-api

在.NET中,我们能够通过对它们进行注释来在方法级别对API进行版本化,并且只复制版本之间不同的方法。我已经转而使用Rails的产品团队,并试图弄清楚是否有任何东西可以帮助我在Rails中做到这一点。到目前为止我所看到的一切建议将整个控制器命名为V1,V2等模块...当假设V1和V2之间只有1种方法不同时,可以大大减少V1和V2的数量。必要的重复。

感谢。

1 个答案:

答案 0 :(得分: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