REST apis的语义版本控制?

Gol*_*den 14 versioning api rest semantic-versioning

我已经为REST apis(header,url,...)评估了许多版本控制模式.到目前为止,最可靠的方法似乎是url选项:它适用于代理,并且不依赖于模糊日期等模糊模式.

现在,当我环顾四周,大家谁使用基于URL的方法似乎使用的版本,如v1,v2等.没有人使用次要版本,甚至是语义版本控制等模式.

这提出了一些问题:

  • 什么时候增加REST api的版本号(当然,你有更多的更新,而不是五年一次)?
  • 如果您只是修复了错误,可能不会增加版本号,但是如何区分这两个版本?
  • 如果您使用非常细粒度的方法,最终会需要并行托管的许多版本.你怎么处理?

换句话说:像GitHub这样的公司,v3如今只有今天(2015年),现在已经有7年了?这是否意味着他们实际上只改变了他们的api两次?我简直不敢相信.

任何提示?

Nic*_*tel 28

主要版本号是Web服务所需的全部内容.因为您的消费者只关心向后不兼容的更改,并且(如果您正确地遵循语义版本控制),那么只有在发布新的主要版本时才会引入这些更改.

所有其他更改(包括新功能,错误修正,补丁等)对您的消费者来说应该是"安全的".这些新增功能不具有被你的消费者使用的,你可能不想继续运行包含错误X或Y的任何长于必要的未打补丁的版本.

使用URL中的完整版本号(或用于API版本控制的任何方法)实际上意味着,每当您对API进行更新/错误修复时,您的消费者都必须更新API的URL,并且他们会继续使用未修补的版本版本,直到他们这样做.

当然,这并不意味着你不能在内部使用语义版本控制!只需使用第一部分(主要版本)作为API的版本号.在您的URL /标头/其他版本控制系统中包含完整版本号是没有意义的.

因此,要回答您的问题:每次制作新版本时都会更新API,但只有在拥有新的主要版本时才会发布新的API版本.这样您只需要托管几个不同的版本(当然,您可以随着时间的推移弃用旧版本).

  • 是的,我想是这样.当然,理想的解决方案是确保所有服务器始终与最新版本的软件保持同步.但这可能是你无法控制的.API中只返回完整版本号的路由怎么样?然后,您可以将人员(我主要是开发人员,我认为)引导到该URL(例如`http:// 12.34.56.789/api/v1/version`)以找出确切的版本.不过,这仍然需要额外的步骤.可能有更好的解决方案,但这是我现在能想到的最好的解决方案;) (2认同)