REST api 的语义版本控制?

Semantic versioning of REST apis?

我已经评估了 REST api 的许多版本控制模式(header、url、…)。到目前为止,最可靠的方法似乎是 url 选项:它与代理一起工作,并且不依赖于晦涩的模式,例如 dates for versioning.

现在,当我环顾四周时,每个使用基于 url 的方法的人似乎都在使用诸如 v1v2 等版本。没有人使用次要版本,甚至没有人使用 semantic versioning.

这样的模式

这引发了一些问题:

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

有什么提示吗?

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

所有其他更改(包括新功能、错误修复、补丁等)应该 'safe' 供您的消费者使用。这些新功能 没有 供您的消费者使用,您可能不想再继续 运行 包含错误 X 或 Y 的未修补版本不必要的。

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

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

所以回答你的问题:你每次发布新版本时都会更新你的API,但是只有当你有一个新的主要版本时你才会发布一个新的API版本。这样你只需要托管几个不同的版本(当然你可以随着时间的推移弃用旧版本)。