使用经典的REST API,将版本添加到api网址是一个好习惯。此版本可以是fi。嵌入在路径(api.myservice.com/v1/dataset
)中或作为参数(api.myservice.com/dataset?v=1
)。部署新版本的api后,只要需要,它就可以与旧版本并存。可以将旧版本的API标记为已弃用,并最终将其删除。
这为前端提供了一个适应新版本API的宽限期,因此在更新后端,由前端开发人员进行调整和由前端用户进行更新之间没有停机时间。
当我们使用Firestore或任何类似的实时数据库时,前端可以直接访问该数据库。数据库的结构可以更改,列或表可以重命名,移动或删除。没有API为前端抽象此基础结构。那么,向前端添加某种版本控制的最佳方法是什么-使用实时数据库进行后端通信?
可能的解决方案:
无论如何都使用REST api作为包含版本的额外层。缺点:使用这种方法会失去实时数据库的优势,例如实时更新和用户管理。
将抽象层移动到前端并公开最低要求的版本。如果前端不符合该版本,则会强制更新前端。缺点:信任前端可以做正确的事,而不是强制执行。
将版本添加到项目名称或表名称中。这将导致大量额外的冗余,其中数据必须不断保持同步。这可能会导致额外的费用,并且容易出错。
还有其他人吗?
对我来说,这些选项都不是好主意。如果前端可以直接访问数据,那么最佳解决方案是什么?我知道可以很快将这个问题标记为“过于广泛”。如果是,请告诉我如何解决我的问题。
答案 0 :(得分:1)
我采用的典型方法是在数据库中放入数据模型的版本号。每当需要对数据库进行模式更改时,我都会检查它是否可以保持向后兼容。如果不是,请增加版本号。
无论哪种方式,模式都编码在数据库的安全规则中。这意味着客户端无法写入无效数据,因为安全规则会将其拒绝。
客户端读取版本号,并在版本号高于构建版本时显示请升级。