Ruby on rails RESTAPI和语义版本控制

Ruby on rails RESTAPI和语义版本控制,ruby-on-rails,rest,api,semantic-versioning,Ruby On Rails,Rest,Api,Semantic Versioning,我的团队已经构建了几个API,现在已经公开了。我们现在正在为我们的一个API添加一些特性,这些特性对于我们现有的客户机来说是不会中断的,因此根据我们的说法,这将被认为是一个小的更新。我们现在意识到我们想要遵循语义版本控制原则。我们也在进行URI版本控制。假设我们使用的是v1.0.0,现在我们应该将其更新为v1.1.0。根据其他帖子的建议,如果我们决定只期望路由中的主要版本,例如/api/v1/anives,但所有客户端都将升级到v1的最新版本,因为它应该向后兼容,这告诉我语义版本控制是在内部处理

我的团队已经构建了几个API,现在已经公开了。我们现在正在为我们的一个API添加一些特性,这些特性对于我们现有的客户机来说是不会中断的,因此根据我们的说法,这将被认为是一个小的更新。我们现在意识到我们想要遵循语义版本控制原则。我们也在进行URI版本控制。假设我们使用的是
v1.0.0
,现在我们应该将其更新为
v1.1.0
。根据其他帖子的建议,如果我们决定只期望路由中的主要版本,例如
/api/v1/anives
,但所有客户端都将升级到v1的最新版本,因为它应该向后兼容,这告诉我语义版本控制是在内部处理的。这通常是如何处理的?我们有一个Rails应用程序,如果我们的结构是这样的:

/controllers
  /api
    /v1.0.0
      animals_controller.rb
如果我们更新到次要版本
v1.1.0
,我们是否应该创建一个新的
v1.1.0
文件夹,其中包含一个新的animates\u controller.rb文件?或者,如果更改是向后兼容的,那么更改是否应该在
v1.0.0
中的animates_controller.rb中?但如果我们这样做,那么真的,不应该是:

/controllers
  /api
    /v1
      animals_controller.rb
?? 我得到的印象是语义版本控制是内部的,不一定需要向消费者公开。。。这只是使用标签的问题吗

制作一个真正的RESTAPI的原因是为了获得可进化性……对于API客户来说,“v1”是一个中指,表示RPC/HTTP(不是REST)——

休息点的一部分是标识符(URI)可以只是标识符,域应用程序协议由超媒体描述

因此,是的,如果您“正确地执行REST”,那么语义版本化的URI将浪费每个人的时间(因为就客户端而言,URI是不透明的。请记住,URI缩写器是有效的)

版本控制的重要性在于链接关系和媒体类型的语义。试图在那里引入向后不兼容的更改会造成巨大的混乱,因此需要做大量工作来维护兼容性(HTML5仍然是
text/html
),而破坏兼容性最好通过引入一个新名称(
text/不再是html
)来实现