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

时间:2015-03-31 05:51:54

标签: mongodb api rest

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

API v1 DATABASE SCHEMA:

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

API v2 DATABASE SCHEMA:

{
  "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. 添加了一些新字段
  6. 如何处理数据库?

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

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

    我的解决方案2:由于我的app 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 个答案:

答案 0 :(得分:0)

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