REST API 版本控制。新版本中包含什么?

标签 rest api versioning endpoint

假设我有两个端点:

  • example.com/v1/send
  • example.com/v1/read

现在我必须在不失去向后兼容性的情况下更改/send 中的某些内容。所以我正在创建:

  • example.com/v2/send

那我该怎么办呢?我是否需要创建与/v1 相同的 example.com/v2/read?让我们想象一下,有很多 Controller 和数百个端点。我会通过更改每个小端点来创建这样的新版本吗?或者我的前端应该像那样使用 API 吗?

  • example.com/v1/send
  • example.com/v2/read

什么是最佳实践?

最佳答案

随着时间的推移,可能会包含新的端点,可能会删除某些端点,模型可能会更改等。版本控制的目的是:跟踪更改

您可能会在一段时间内同时支持版本 1 和版本 2,但您几乎不会永远支持这两个版本。在某些时候,您可能会放弃版本 1,而只想保持版本 2 完全正常运行。

因此,将新版本的 API 视为可以独立于先前版本使用的 API。换句话说,一个特定的客户端应该针对 API 的一个版本而不是多个。当然,如果可能的话,最好具有向后兼容性。


适时:您是否考虑过一种媒体类型来处理版本控制,而不是在 URL 中添加版本?

例如,看看 GitHub API .所有请求均由 API 的默认版本处理,但可以使用媒体类型在 Accept header 中定义目标版本(并鼓励客户定义目标版本):

Accept: application/vnd.github.v3+json

关于REST API 版本控制。新版本中包含什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43516966/

相关文章:

http - 从GWT开始,使用RPC调用重要吗?

api - 我们能够按时间轴访问生活事件吗?

mysql - MySQL 中的行版本控制

ruby-on-rails - rails/PaperTrail : approving edits

c# - PayPal Rest API - 更新计费计划返回 URL

javascript - 在将 header 发送到 ServerResponse.setHeader 中的客户端 [dev.start] 后无法设置 header

javascript - 有没有办法在 google API URL 之外调用 google initMap 回调函数?

ios - ionic 电容器型号

WCF 全局 (.asax) 行为

api - 取决于 OpenApi 3.0.0/Swagger 中的媒体类型的多个响应正文示例