繁体   English   中英

如何在REST API中管理数据库版本

How to manage database version in REST API

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

假设我有一个名为APPO v1的移动应用程序,它从REST API v1中获取资源。 APPO v1大约有数千个用户。现在,我正在使用API​​ v2开发APPO v2。 api和app都具有新功能和数据库中的新字段。 有些字段也被修改。

API v1数据库架构:

{
  "user_id": NumberLong(616),
  "name": "XYZ",
  "city":"Dhaka"
  "password": "raw password: 12345678",
  "gender": ""
}

API v2数据库架构:

{
  "user_id": "STRING HASH",
  "name": "XYZ",
  "address":"98/3 Circle road, Dhaka 1209"
  "password": "MD5 HASH",
  "NEW_FIELD": NumberLong(5)
  "ANOTHER_FIELD": ""
}

变化:

  1. 用户ID的数据类型已更改
  2. 简短的城市名称替换为地址字符串
  3. 密码格式已更改
  4. 性别字段已删除
  5. 添加了一些新字段

如何处理数据库?

我的解决方案1:用v1和v2分隔数据库。 重新格式化v1并粘贴到v2

解决方案1的问题:所有用户都不会在一天内更新应用程序。 如果v1用户将其应用更新为v2,则他们可能会丢失最近的数据。 我必须在两个数据库之间建立一个同步器

我的解决方案2:由于我的应用v1使用原始密码,因此我必须立即保留此密码。 我应该把两个SCHEMA

{
  "user_id": NumberLong(616),
  "user_id_hash": "STRING HASH",
  "name": "XYZ",
  "city":"Dhaka"
  "address":"98/3 Circle road, Dhaka 1209"
  "password": "raw password: 12345678"
  "password_md5": "MD5 FORMAT",
  "gender": ""
  "NEW_FIELD": NumberLong(5)
  "ANOTHER_FIELD": ""
}

解决方案2的问题:当版本大于10或更大时,它将创建大量垃圾。 在v10我不需要v6,v5 ....... v1数据

注意:字段与REST模型无关。 都是此类情况的示例字段

我完全困惑如何处理。 我非常感谢您的耐心和您的建议! 提前致谢 !

1 个回复

如果您不想对数据库进行非规范化,我有一个解决方案。 您可以使用桥接模式来解决此问题。 当您遇到同一类型的多个问题/实现(API v1和API v2 ...等),但是客户端仅与一个实现(例如API v1)连接时,您需要实现一个桥接对象,该对象会理解,在哪里放置客户,我的意思是要求实施。 从技术上讲,您必须为每个问题分别编写业务逻辑,但是仅一个REST Api就足以将客户端重定向到该实现。 谢谢

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题
 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM