新 API 版本是否也应该支持旧版本的所有 api? [设计问题]

Should new API version supports all apis of older versions also ? [Design question]

我有一组 api 暴露在 base/api/v1/end-point1base/api/v1/end-point2base/api/v1/end-point3 等位置。这些基本上是 v1 apis.

现在我们继续公开 v2 apis。在这个新的 api 版本中,我们将添加一些新的 apis,重构一些现有的 (v1) apis 并且一些 apis 将保持不变。

所以我的问题是我是否也应该在 v2 中公开 v1 的所有未更改的 api?


示例:

API V1:

api/v1/users - 保持不变

api/v1/feature1 - 将会改变

其他端点...

API V2:

api/v2/feature1 - 重构功能

api/v2/feature2 - 新增

api/v2/users - 我也应该公开这个吗?


我认为:

我不应该 : 因为它是一样的

我应该:因为如果它没有公开,那么客户端将需要为不同的资源使用不同的 api 版本(端点)。

你在做什么?你怎么看?任何参考或最佳实践资源将不胜感激。

如果这个问题不适用于这个平台,请告诉我。我很乐意在适当的地方提出这个问题。

是的。

每个版本应该相互独立。基本原理是,一旦 API 的一个版本发布到 public,它将表现相同,直到它被弃用。这确保提供的 API 是稳定的并且不会因不同的响应而中断。同样从使用 API 的最终开发人员的角度来看,它很干净并且不会混淆记住多个版本。

我们通常有多个版本控制,如 SEMVER 文档中所述

Given a version number MAJOR.MINOR.PATCH, increment the:

MAJOR version when you make incompatible API changes

MINOR version when you add functionality in a backwards-compatible manner, and

PATCH version when you make backwards-compatible bug fixes.