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