[英]Elegant API versioning in Rails
目前我正在我们的Rails应用程序中实现REST API的版本控制。 有没有一种方法可以实现,所以你只在新版本中定义新功能? 比如说:
我有一个用户控制器和一个产品控制器。 V1和V2之间的产品保持不变,但用户已经改变。 如果我们可以设置它,那将是很好的,如果我呼吁产品的V2,我的应用程序知道它不存在,只是使用最新的控制器版本(在这种情况下,V1)。 这将允许我们不为每个版本创建一整套新的控制器; 我们只为已更改的特定功能创建新的控制器。
下面是我们Routes.rb的一个片段,不可否认,我不知道如何解决这个问题。 任何帮助将不胜感激!
namespace :api do
scope module: :v1, constraints: ApiConstraints.new(version: 1) do
resources :users
resources :products
end
scope module: :v2, constraints: ApiConstraints.new(version: 2) do
resources :users
end
end
我有时使用相同的策略,最近改变了方法 - 不可否认,我有偏见,因为我也是我们使用VersionCake的新方法的作者之一。
这种方法只是对我们的有效负载或视图进行版本化,后面的视图是客户端之间的合同,如果合同发生中断,那么版本需要更改。 在VersionCake中,您可以像这样对视图进行版本控制:
app/views/products/show.v1.rabl
app/views/products/show.v2.rabl
app/views/users/show.v1.rabl
根据您的问题,重要的特定功能是VersionCake将优雅地降级到最新支持的版本。 鉴于上面的示例,请求users/1.json
版本2的客户端将接收users/show.v1.rabl
的有效负载。
所有这些都说,它需要采用新的版本方法,所以它可能不是最好的答案,但我认为这是一个值得考虑的选择。
这就是Grape的设计目标。
此外,您可以选择将您的API安装在routes.rb文件中,或者将其映射到config.ru中,绕过Rails堆栈并大大提高API的性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.