【问题标题】:Rails API Versioning at Method Level方法级别的 Rails API 版本控制
【发布时间】:2015-12-27 07:11:30
【问题描述】:

在 .NET 中,我们能够在方法级别对 API 进行版本化,方法是对其进行注释,并且只复制版本之间不同的方法。我已经切换到使用 Rails 的产品团队,并试图弄清楚是否有任何东西可以帮助我在 Rails 中做到这一点。到目前为止,我所看到的所有内容都建议在具有 V1、V2 等的模块中命名您的整个控制器......当我们说 V1 和 V2 之间只有一种方法不同时,提供了大大减少数量的潜力需要复制。

谢谢。

【问题讨论】:

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


    【解决方案1】:

    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
    

    【讨论】:

    • 非常感谢,这太棒了。
    猜你喜欢
    • 2016-05-22
    • 2016-03-21
    • 1970-01-01
    • 2017-05-10
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多