【问题标题】:Versioning rails API版本化 Rails API
【发布时间】:2017-01-24 19:57:59
【问题描述】:

我试图找到一种方法来管理我的 rails API 的不同版本。 不同的路由不是问题,当我在不同版本之间更改模型和数据库(Postgres)时,问题就开始了。在 rails API 中管理不同版本的最佳实践是什么?谢谢大家

编辑:示例 - 当我将其中一个模型从 V1 更改为 V2 时,问题就来了。假设在 V1 我有一个名为“Product”的模型,我不小心将“price”属性保存在字符串而不是整数中,在 V2 我看到了问题并进行了修复问题的迁移。修复带来了一个新问题,现在 V1 API 被破坏,因为它试图从整数列中获取字符串

【问题讨论】:

  • 您是否试图保持某种程度的向后兼容性?

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


【解决方案1】:

我喜欢做的是创建不同的端点

1) 设置路线

namespace :api do

  namespace :v1 do
    resources :...
  end

  namespace :v2 do
    resources :...
  end

end

现在您已经有了端点,您可以创建控制器 我喜欢这样做的方式是

#app/controller/api_controller.rb
class ApiController < ActionController::Base

  layout false
  ...

end

现在每个版本的控制器文件夹中都有一个文件夹

应用程序/控制器/api/v1 应用程序/控制器/api/v2

现在在每个你的暴露你需要什么

class Api::V1::MooController < ApiController

end

更新

您不能删除 price 的字符串值,但您必须创建一个新字段调用 int_price。这样 api v1 仍然可以正确响应字符串 price

现在,您还需要一个方法来在字符串价格更新时填充 int_price

注意

我不认为你应该有一个新的端点只是为了将价格从字符串更改为整数,你可以编写一个方法 if string 转换为整数

希望对你有帮助

【讨论】:

  • 嘿,首先谢谢你。其次,我在我的问题中添加了更多关于我面临的问题的详细信息。我希望你阅读这篇文章
  • Stripe 似乎有一个非常有趣的方法:stripe.com/blog/api-versioning
猜你喜欢
  • 2013-11-30
  • 2016-05-22
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 2012-03-26
  • 2015-08-31
  • 1970-01-01
相关资源
最近更新 更多