新 API 版本是否也应该支持旧版本的所有 api? [设计问题]
Should new API version supports all apis of older versions also ? [Design question]
我有一组 api 暴露在 base/api/v1/end-point1
、base/api/v1/end-point2
、base/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.
我有一组 api 暴露在 base/api/v1/end-point1
、base/api/v1/end-point2
、base/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.