Firebase Firestore后端版本控制的最佳实践

Firebase Firestore后端版本控制的最佳实践,firebase,google-cloud-firestore,api-versioning,Firebase,Google Cloud Firestore,Api Versioning,对于经典的RESTAPI,向api url添加一个版本是一个很好的实践。这个版本可以是fi。嵌入路径api.myservice.com/v1/dataset中,或作为参数api.myservice.com/dataset?v=1。当部署新版本的api时,只要需要,它就可以与旧版本共存。API的旧版本可以标记为已弃用,最终可以删除 这为前端提供了一个适应新版本API的宽限期,因此在更新后端、由前端开发人员进行调整和由前端用户进行更新之间没有停机时间 当我们使用Firestore或任何类似的实时数据

对于经典的RESTAPI,向api url添加一个版本是一个很好的实践。这个版本可以是fi。嵌入路径api.myservice.com/v1/dataset中,或作为参数api.myservice.com/dataset?v=1。当部署新版本的api时,只要需要,它就可以与旧版本共存。API的旧版本可以标记为已弃用,最终可以删除

这为前端提供了一个适应新版本API的宽限期,因此在更新后端、由前端开发人员进行调整和由前端用户进行更新之间没有停机时间

当我们使用Firestore或任何类似的实时数据库时,前端可以直接访问数据库。数据库的结构可以更改,列或表可以重命名、移动或删除。没有为前端抽象这个底层结构的API。那么,使用实时数据库向前端-后端通信添加某种版本控制的最佳方法是什么

可能的解决办法:

无论如何,使用RESTAPI作为包含版本的附加层。缺点:使用这种方法,您将失去实时数据库的优势,例如实时更新和用户管理

将抽象层移动到前端,并公开所需的最低版本。如果前端不符合此版本,则将强制更新前端。缺点:前端被信任做正确的事情,而不是强制执行

将版本添加到项目名称或表名称中。这将导致大量额外的冗余,数据必须不断保持同步。这可能会导致额外的成本,并且容易出错

还有别的吗


这两种选择对我来说都不是好主意。如果前端可以直接访问数据,那么最好的解决方案是什么?我知道这个问题很快就会被标记为“过于宽泛”。如果是,请告诉我如何集中我的问题。

我采取的典型方法是在数据库中输入数据模型的版本号。每当需要对数据库进行模式更改时,我都会检查它是否可以保持向后兼容。如果不是,则增加版本号

无论哪种方式,模式都编码在数据库的安全规则中。这意味着客户端无法写入无效数据,因为它将被安全规则拒绝


客户阅读版本号,并在版本号高于其构建目的时显示“请升级”。

这是一个非常开放的问题,可能会产生一系列自以为是的答案。没有一种正确的方法可以对数据进行版本设置。因此,它并不真正适合堆栈溢出。我建议你把这个问题带到Reddit这样的讨论板上,以便进行一些一般性的对话。我把话题转移到了建议的位置。我认为这是一个很有说服力的问题,这个问题和弗兰克的回答对我都有帮助。我没有想到禁止错误写入的安全规则,尽管这很明显。谢谢你,笨蛋!