Typescript 如何在像firestore这样的文档数据库中实施显式数据模式?
任何客户端代码(在我们的例子中是Angular应用程序)都会在某个时刻对集合中的文档进行假设:它会假定在某些状态下存在某些属性等 换句话说,我们有一个隐式数据模式 用typescript显式表示模式并强制DB操作以符合模式的好方法是什么? 重要提示:我们实现了文档模式版本,作为任何文档的属性。因此,具有旧模式和新模式的文档并存。例如,版本为1的国家不需要“资本”字段,而版本为2的国家必须有“资本”字段Typescript 如何在像firestore这样的文档数据库中实施显式数据模式?,typescript,google-cloud-firestore,datamodel,Typescript,Google Cloud Firestore,Datamodel,任何客户端代码(在我们的例子中是Angular应用程序)都会在某个时刻对集合中的文档进行假设:它会假定在某些状态下存在某些属性等 换句话说,我们有一个隐式数据模式 用typescript显式表示模式并强制DB操作以符合模式的好方法是什么? 重要提示:我们实现了文档模式版本,作为任何文档的属性。因此,具有旧模式和新模式的文档并存。例如,版本为1的国家不需要“资本”字段,而版本为2的国家必须有“资本”字段 因此,架构模型必须支持这种情况,这是一项要求。有关可以存储哪些数据的规则可以在Firebase
因此,架构模型必须支持这种情况,这是一项要求。有关可以存储哪些数据的规则可以在Firebase的应用程序中强制实施。这些规则通常用于访问控制(谁可以访问数据?和数据验证(可以存储哪些数据?) 例如,此规则仅允许在文档具有
lastIndex
和lastUpdated
字段时写入文档:
allow write: request.resource.data.keys().hasAll(['lastIndex', 'lastUpdated'])
您还可以验证这些字段的类型,甚至它们的值。例如,以下规则确保lastIndex
是一个数字,而lastUpdated
必须始终设置为与服务器相同的时间:
allow write: request.resource.data.keys().hasAll(['lastIndex', 'lastUpdated']) &&
request.resource.data.lastIndex is int &&
request.resource.data.lastUpdated == request.time
现在有一些关于这些安全规则的精彩视频在网上发布。这段视频看起来特别相关。我正在构建一个GraphQL API,它使用Firebase Admin SDK访问Firestore。Firebase管理SDK将忽略FSR。如何确保数据完整性并跟踪“模式”更改?无法强制Admin SDK遵循安全规则,因此在从Admin SDK编写时,您也必须在代码中验证数据结构。