api - REST API 的多个版本如何共享相同的数据模型?

标签 api rest database-design versioning

有大量关于如何管理 RESTful Web 服务版本控制的学术理论和最佳实践的文档,但是我还没有看到太多关于多个 REST API 如何与数据交互的讨论。

我希望查看有关如何处理托管依赖于同一数据池的应用程序的多个版本的各种架构策略或文档。

例如,假设您对数据库表进行了数据库级别的破坏性更改,导致您必须将主要 API 版本增加到 v2。 现在,在任何给定时间,用户都可以同时与 v1 Web 服务和 v2 Web 服务交互,并创建两个服务可见且可编辑的数据。应该如何处理?

最佳答案

对 API 引入的大多数更改都会影响响应的内容,直到引入的更改是增量的为止,这不是一个很大的问题(注意:您永远不应该将确切的数据库模型直接暴露给客户端)。

当您对数据库模型进行破坏性/重大更改并引入新的 API 版本的 API 时,有两种选择:

  1. 关闭以前的版本,过滤掉所有查询以回复 301 和新位置。
  2. 如果 1. 不可能同时维护 API 的先前版本和当前版本。由于这可能会耗费时间和金钱,因此应该只进行一段时间,最后应该关闭以前的版本。

数据库模型怎么样?当两个版本的 API 同时处于事件状态时,我会尝试使数据库模型尽可能保持一致 - 请记住,同时运行两个版本只是暂时的。但正如我之前所写,数据库模型永远不应该直接暴露给客户端 - 这可能会帮助您避免很多问题。

关于api - REST API 的多个版本如何共享相同的数据模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30902206/

相关文章:

json - Spring Boot Rest - OffsetDateTime 以浮点形式返回

javascript - RESTful 提交到 Github 文件

web-services - RPC 伪装成 REST 是个坏主意吗?

php - 我应该使用 EAV 模型吗?

mysql - mysql 表中的数据表示

api - 使用 api spigot/bukkit 在 config.yml 中保存注释

node.js - 如何将 postman 的数据发布到 Output.json 文件?

MySQL:长表与宽表

json - 错误 : Type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>' in type cast

javascript - 使用来自 html 表单的多个输入作为 url 中的变量进行 ajax 调用