Firebase Data Connect 使用入门

在本快速入门中,您将学习如何完成以下操作:

  • 将 Firebase Data Connect 添加到您的 Firebase 项目。
  • 设置包含 Visual Studio Code 扩展程序的开发环境,以使用生产实例。
  • 然后,我们会介绍如何执行以下操作:
    • 使用电子邮件应用示例创建架构
    • 为架构定义查询和变更
    • 使用自动生成的 SDK,从客户端调用这些查询和变更。
    • 将最终原型部署到生产环境中。

前提条件

如需使用本快速入门,您需要做好以下准备。

将 Data Connect 添加到您的项目并创建数据源

  1. 如果您尚未创建 Firebase 项目,请先创建一个。
    1. Firebase 控制台中,点击添加项目,然后按照屏幕上的说明操作。
  2. 将您的项目升级为 Blaze 方案。这让您可以创建一个 Cloud SQL for PostgreSQL 实例。

  3. 前往 Firebase 控制台的“Data Connect”部分,然后按照产品设置工作流操作。

  4. 请为您的 CloudSQL for PostgreSQL 数据库选择一个位置。

  5. 请记下项目、服务和数据库的名称及 ID,以便稍后确认。

  6. 按照剩下的设置流程操作,然后点击完成

选择并设置开发环境

首先,在 Visual Studio Code 中对应用进行原型设计。

您也可以选择安装本地 PostgreSQL 数据库,使用 Data Connect 模拟器进行本地开发。本快速入门指南的末尾将介绍此设置。

Data Connect 支持两种原型设计开发体验:

  • 如果您是 WebKotlin Android 开发者,则可以在连接到 Cloud SQL for PostgreSQL 实例的同时,在本地对架构和操作进行原型设计,或(可选)在本地运行 PostgreSQL。
  • 如果您是Web 开发者,则可以使用 IDX 在 IDX 工作区中进行原型设计,具体方法是:使用 PostgreSQL 的预配置 IDX 模板、带 Data Connect 模拟器的 VS Code 扩展程序,以及为您设置的快速入门代码。

VS Code 开发

如果您喜欢在本地进行开发,而不是使用 IDX,请设置 Firebase VS Code 扩展程序,以便通过针对 Web、Kotlin Android 和即将针对 iOS 生成 SDK 的 SDK 快速迭代开发。

  1. 为本地项目创建一个新目录。
  2. 在新目录中打开 VS Code。
  3. 从 Firebase 存储下载以 VSIX 软件包形式捆绑的扩展程序。
  4. 在 VS Code 中,从 View 菜单中选择 Extensions
  5. 扩展程序面板标题栏中,点击菜单图标 more_horiz,然后按照 Install from VSIX... 操作。

IDX 开发

IDX 是针对 Web 应用开发进行了优化的环境。如果您是 Kotlin Android 开发者,请按照 VS Code 开发标签页上的步骤操作。

要设置 Data Connect IDX 模板,请执行以下操作:

  1. Project IDX 网站上访问模板。
  2. 按照设置流程操作。

设置本地项目

按照常规说明安装 CLI。

然后,启用 Firebase Data Connect 实验。

firebase experiments:enable dataconnect

为了设置您的本地项目,我们将初始化您的项目目录,并更新生成代码所需的一些配置文件。

设置项目目录

初始化您的项目目录。

Firebase Extensions 扩展程序设置

在 VS Code 左侧面板中,点击 Firebase 图标以打开 Firebase VS Code 扩展程序界面。

在 Firebase 扩展程序界面中:

  1. 确保您已登录。
  2. 在 Firebase 控制台中,确认 Data Connect 设置流程(包括数据库预配)已完成。
  3. 点击 Run firebase init 按钮。
  4. 在 VS Code 下面板中查看 Terminal(终端)标签页以获取提示。
  5. 选择 Data Connect 作为在此目录中使用的功能。
  6. 出现提示时,提供您之前在控制台中创建的 Data Connect 项目的 ID。

终端设置

  1. 如有必要,请使用 firebase login 登录。
  2. 在 Firebase 控制台中,确认 Data Connect 设置流程(包括数据库预配)已完成。
  3. 运行 firebase init,按照屏幕上的提示将目录初始化为 Firebase 项目。
  4. 选择 Data Connect 作为在此目录中使用的功能。
  5. 出现提示时,提供您之前在控制台中创建的 Data Connect 项目的 ID。

上述任一流程都会创建 firebase.json.firebaserc 文件,以及 dataconnect 子目录(包括本地工作目录中的重要 dataconnect.yamlconnector.yaml 文件)。

配置生成 SDK 代码的位置

在您修改架构时,Data Connect 会自动生成 SDK 代码。

如需指定生成 SDK 的位置,请在 dataconnect/connector/connector.yaml 中更新初始连接器的文件。

connectorId: "my-connector"
authMode: "PUBLIC"
generate:
  javascriptSdk:
    outputDir: "../../js-email-generated"
    package: "@email-manager/emails"
    packageJsonDir: "../../"
  kotlinSdk:
    outputDir: "../kotlin-email-generated"
    package: com.myemailapplication

熟悉 Data Connect Toolkit

Data Connect Toolkit 是 Firebase VS Code 扩展程序的一个组件,有助于直接从 Visual Studio Code 进行架构开发以及查询和变更管理。

要了解工具包的功能,请执行以下操作:

  1. 在 VS Code 中打开您的 Firebase 项目目录(如果尚未打开)。
  2. 在 VS Code 的左侧面板中,点击 Firebase 图标以打开 Firebase VS Code 扩展程序界面。

请注意,在整个开发工作中,工具包允许您与本地环境以及生产资源进行交互。在本快速入门中,您将与生产环境进行互动。

IDX 中适用于 Data Connect 的 VS Code 扩展程序

扩展程序界面为您提供了一些实用功能:

在 VS Code 主边栏中:

  • 一个 Config 面板,可让您登录 Google 并选择 Firebase 项目。
  • 一个 Firebase Data Connect 面板,可让您控制内置模拟器并将资源部署到生产环境中。
  • FDC Explorer 面板,其中列出了根据您的架构自动生成的隐式查询和变更
在 VS Code 下面板中:

  • Data Connect Execution 标签页,其中包含可让您在请求中传递数据、模拟身份验证以及查看结果的工具。

在我们开始开发应用之前,请先了解一下该扩展程序的一些功能。

试用自定义 CodeLens 当您使用 schema.gqlqueries.gqlmutations.gql 文件中的资源时,在编写好语法完整的代码块后,自定义 CodeLens 会显示您可以对声明的表和操作执行的操作。
  • 对于表,CodeLens 可帮助您生成变更以将数据添加到后端数据库。
  • 对于查询和变更,您可以通过 CodeLens 在本地或针对生产资源运行相应操作。
为请求设置身份验证级别 在下半部分面板中,Data Connect Execution 面板提供了一个“配置”标签页,您可以在其中为操作选择模拟身份验证级别。
在查询和变更中填充变量 在同一“配置”标签页中,您可以填充操作载荷。
查看历史记录、响应和错误 同样在“Configuration”(配置)标签页中,您可以查看“History”(历史记录)和“ Results”(结果)标签页,以了解调试信息。

创建 Data Connect 架构和查询

您的设置已完成。现在,我们可以开始使用 Data Connect 进行开发了。

开始使用 GraphQL 为用户和电子邮件建模。您将更新以下位置中的来源:

  • /dataconnect/schema/schema.gql
  • /dataconnect/connector/queries.gql

开始开发架构

在 Firebase 项目目录中,记下 dataconnect 文件夹。您可以在此处使用 GraphQL 为 Cloud SQL 数据库定义数据模型。

/dataconnect/schema/schema.gql 文件中,开始定义包含用户和电子邮件的架构。

用户

在 Data Connect 中,GraphQL 字段映射到列。用户拥有 uidname 和电子邮件地址 address。Data Connect 可识别多种原始数据类型:StringDate

复制以下代码段或取消对文件中的相应行的注释。

# File `/dataconnect/schema/schema.gql`

type User @table(key: "uid") {
   uid: String!
   name: String!
   address: String!
}

默认情况下,如果 UUID id 键未提供,Firebase Data Connect 将添加该键。不过,在这种情况下,您希望我的 uid 作为主键,您可以通过 @table(key: "uid") 指令执行此操作。

电子邮件

现在您拥有了用户,可以对电子邮件进行建模了。您可以在此处添加电子邮件数据的典型字段(或列)。这一次,我们省略了添加主键的操作,因为您可以依靠 Data Connect 来管理它。

# File `/dataconnect/schema/schema.gql`

type Email @table {
   subject: String!
   sent: Date!
   text: String!
   from: User!
}

请注意,from 字段会映射到 User 类型。Data Connect 了解这是 EmailUser 之间的关系,并将为您管理此关系。

将架构部署到生产环境

由于您使用 Firebase VS Code 扩展程序来处理生产数据库,因此需要先部署架构,然后才能继续操作。

  1. 您可以使用 Firebase VS Code 扩展程序进行部署。
    • 在扩展程序界面中的“Firebase Data Connect”面板下,点击部署
  2. 或者,您也可以使用 Firebase CLI。

    firebase deploy
    
  3. 在扩展程序或 CLI 流程中,您可能需要审核架构更改并批准可能具有破坏性的修改。系统会提示您执行以下操作:

    • 使用 firebase dataconnect:sql:diff 查看架构更改
    • 如果您对更改感到满意,请通过 firebase dataconnect:sql:migrate 启动的流程应用这些更改。

查看生成的架构扩展

在您修改电子邮件架构时,Data Connect 会自动生成架构扩展、查询、变更、过滤器和表关系。您可以通过两种方式查看生成的代码。

  • 您可以在 Firebase 扩展程序界面的 FDC Explorer 面板下查看生成的隐式查询和变更的列表。
  • 您可以在 .dataconnect/schema 目录下的源中查看所有本地生成的代码。

执行变更以将数据添加到表中

/dataconnect/schema/schema.gql 中,您可以看到 CodeLens 按钮显示在 GraphQL 类型之上。

开发时查询和变更

与这些 CodeLens 按钮相关联的操作是快速且有用的操作,在本例中,这些操作是向表中添加数据。Data Connect 使用 GraphQL 变更来描述如何以及谁可以对数据库执行操作。使用此按钮可创建用于快速数据种子的开发时操作。

将架构部署到生产环境后,您可以使用运行(生产)CodeLens 按钮在后端执行这些操作。

编写查询以列出电子邮件

而最有趣的部分是查询。作为开发者,您习惯于编写 SQL 查询而不是 GraphQL 查询,因此一开始您可能会感觉略有不同。然而,GraphQL 比原始 SQL 更为简洁和类型安全。我们的 VS Code 扩展程序还简化了开发体验

开始修改 /dataconnect/connector/queries.gql 文件。如果您想获取所有电子邮件,请使用这样的查询。

# File `/dataconnect/connector/queries.gql`

query ListEmails @auth(level: NO_ACCESS) {
  emails {
    id, subject, text, sent
    from {
      name
    }
  }
}

这里一个真正令人兴奋的功能是能够像处理图表一样处理数据库的关系。由于电子邮件地址包含引用用户的 from 字段,因此您可以嵌套到该字段并获取用户的相关信息。

@auth 指令

在此示例中,@auth 指令并未发挥最大作用,但其概念非常强大。这是您为数据库操作确定授权政策的方式。

此查询非常简单,当您执行涉及多对多关系的更复杂的联接时,Data Connect 真正令人兴奋的功能就会开始发挥作用。在探索工具和文档时,您将详细了解这一点。

测试查询

创建此查询后,请先检查它能否正常运行,然后再将其集成到客户端代码中。Data Connect 开发者体验的一项功能是能够使用 Data Connect Execution 面板快速迭代和测试查询结果。

您可以提供此查询所需的参数,然后点击查询名称上方的“CodeLens”按钮。这将执行查询并显示结果,因此您可以看到它按预期工作。

生成客户端 SDK 代码并从客户端应用查询数据

要结束开发周期,请将此查询集成到客户端代码中。

您可以编写一个客户端来演示如何调用查询以及处理来自 Data Connect 服务的回复。

  1. 在您之前在 connector.yaml 文件中指定的位置找到自动生成的源代码。
  2. 将 Firebase 添加到您的项目中,注册您的应用,并安装相关的 Firebase 核心 SDK:

  3. 如果您未使用 IDX,则可设置一个客户端,并可从命令行调用。

JavaScript

创建源文件 clientTest.js,然后复制以下代码。

const { initializeApp } = require("firebase/app");
const {
  connectDataConnectEmulator,
  getDataConnect,
} = require("firebase/data-connect");
const { listEmails, connectorConfig } = require("@email-manager/emails");

// TODO: Replace the following with your app's Firebase project configuration
const firebaseConfig = {
  //...
};

const app = initializeApp(firebaseConfig);
const dc = getDataConnect(app, connectorConfig);

// Remove the following line to connect directly to production
connectDataConnectEmulator(dc, "localhost", 9399);

listEmails().then(res => {
  console.log(res.data.emails);
  process.exit(0);
});
    

您可以运行自己的客户端

    node clientTest.js
    
Kotlin Android

创建源文件 clientTest.kt,然后复制以下代码。

class MainActivity : ComponentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    lifecycleScope.launch {
      val connector = MyConnector.instance
      connector.dataConnect.useEmulator() // Remove to connect to production
      try {
        println(connector.listEmails.execute().data.emails)
      } catch (e: Throwable) {
        println("ERROR: $e")
      }
    }
  }
}
    

然后:

  1. 运行 activity。
  2. 检查 Android 的 logcat 输出。

将完成的原型部署到生产环境

您已完成开发迭代。现在,您可以通过 Firebase 扩展程序界面或 Firebase CLI 将架构、数据、查询和更改部署到服务器,就像使用架构一样。

部署后,您的 Data Connect 服务即可处理来自客户端的操作。Cloud SQL for PostgreSQL 实例将使用其最终部署的生成架构和数据进行更新。

(可选)在本地安装 PostgreSQL

在本地安装 PostgreSQL 并将其与模拟器集成后,您可以在完全本地的开发环境中设计原型。

您可以安装 PostgreSQL 的新实例,也可以使用现有实例。

安装 PostgreSQL

按照适用于您的平台的说明安装 PostgreSQL 15.x 版。

请记下安装过程中的主机名、端口、用户名和密码以及相关参数输出。

如需连接到 PostgreSQL 实例,模拟器需要:

  • 这些设置配置参数
  • dataconnect.yaml 中的数据库名称,以及在本地实例中初始化的相应名称的数据库。

使用连接字符串更新 .firebaserc

使用您的本地 PostgreSQL 配置详细信息(包括本地 PostgreSQL 用户名和密码)将连接字符串添加到 .firebaserc 文件中的以下键。

{
  "projects": {},
  ...,
  ...,
  "dataconnectEmulatorConfig": {
    "postgres": {
      "localConnectionString": "postgresql://postgresusername:postgrespassword@localhost:5432?sslmode=disable"
    }}
}

连接到您的本地 PostgreSQL 实例

完成此配置后,如需连接到您的本地数据库,请执行以下操作:

  1. 在 VS Code 的左侧面板中,点击 Firebase 图标以打开 Firebase VS Code 扩展程序界面。
  2. 点击 Connect to Local PostgreSQL 按钮。

后续步骤