假设我有一个名为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:按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模型无关。所有这些都是这种情况的示例字段
我完全很困惑如何处理。我非常感谢您的耐心和建议! 提前致谢!
答案 0 :(得分:0)
如果您不想对数据库进行非规范化,我有一个解决方案。您可以使用桥接模式来解决此问题。当您有相同类型的多个问题/实现(API v1和API v2 ...等),但客户端将只与一个实现连接(例如API v1),您需要实现一个桥接对象,这将理解,在哪里放置客户端,我的意思是要求实施。从技术上讲,您必须分别为每个问题编写业务逻辑,但只有一个REST Api足以将客户端重定向到该实现。感谢