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

标签 rest django-rest-framework api-design

我在 base/api/v1/end-point1base/api/v1/end-point2base 公开了一组 api/api/v1/end-point3 等。这些基本上都是 v1 api。

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

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


示例:

API V1:

api/v1/users - 保持不变

api/v1/feature1 - 将会改变

其他端点...

API V2:

api/v2/feature1 - 重构功能

api/v2/feature2 - 新添加

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


我认为:

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

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

你在做什么?你的看法是什么?任何引用任何最佳实践资源将不胜感激。

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

最佳答案

是的。

每个版本应该独立于其他版本。理由是,一旦 API 版本向公众发布,它的行为就会保持不变,直到被弃用为止。这确保了所提供的 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.

关于rest - 新的API版本是否也应该支持旧版本的所有API? [设计问题],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53333147/

相关文章:

node.js - 如何在 Node Js 上为 Rest API 创建一个干净的架构

java - 如何将参数从prototypejs客户端传递到rest web服务

C++ API 设计 : is using void* a bad idea?

html - 进行 api 调用以呈现按钮并需要能够操作按钮 : for example be able to turn the font color red

java - 从 google play developer rest api 访问编辑方法

Android - 发布到 RESTful Web 服务

javascript - 我无法使用 jquery 使用 Handsontable 加载数据

python - 序列化器中的ArrayField

python - 如何将模型方法暴露给 django-rest-framework

javascript - 并行开发同步/阻塞和异步/非阻塞库-api 的好方法是什么? (JavaScript)