使用 Firestore 后端进行版本控制的最佳实践 [关闭]

Posted

技术标签:

【中文标题】使用 Firestore 后端进行版本控制的最佳实践 [关闭]【英文标题】:Best practices of versioning with Firestore backend [closed] 【发布时间】:2020-03-13 16:00:25 【问题描述】:

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

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

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

可能的解决方案:

无论如何都要使用 REST api 作为包含版本的额外层。缺点:使用这种方法会失去实时数据库的优势,例如实时更新和用户管理。

将抽象层移至前端并公开所需的最低版本。如果前端不满足此版本,则强制更新前端。缺点:相信前端会做正确的事,而不是强制执行。

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

还有其他的吗?

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

【问题讨论】:

这是一个非常开放的问题,可能会产生一堆固执己见的答案。没有一种正确的方法来对数据进行版本控制。因此,它并不适合 Stack Overflow。我建议您将这个问题带到 Reddit 等讨论板,以便进行一些一般性的对话。 reddit.com/r/Firebase 我按照建议将主题移至reddit.com/r/Firebase/comments/dyhzlv/…。 我认为这对 SO 来说是一个可靠的问题,这个问题和弗兰克的回答都对我有帮助。 【参考方案1】:

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

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

客户端读取版本号,并在版本号高于构建时显示请升级

【讨论】:

没有想到禁止错误写入的安全规则,虽然很明显。谢谢粉扑!

以上是关于使用 Firestore 后端进行版本控制的最佳实践 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Harbor 和Containerd的最佳实栈

基于WPS的Word最佳实践系列(利用表格控制排版)

Firestore 用户管理最佳实践?

使用 WCF 对服务进行版本控制的最佳实践?

进行微服务 REST API 版本控制的最佳方法是啥?

Firebase Firestore iOS 多种型号