如何使用 Firebase 成功构建 API?

Firebase:构建API的强大工具

Firebase,作为一个应用开发平台,最初于2012年面世,并在两年后被谷歌收购。 最初,它被视为一个专为实时应用程序设计的数据库,但谷歌发现了其巨大的潜力,并决定为其增加更多服务。

如今,Firebase已发展成为一个功能全面的后端即服务(BaaS)系统,拥有18项不同的服务,旨在简化Web和移动应用程序的开发流程。 众多知名公司,如埃森哲、阿里巴巴旅行、Stack、Twitch和Instacart,以及超过2300家其他企业,都选择了Firebase BaaS服务。

Firebase的优势

Firebase最初提供的实时数据库服务,至今仍是其最吸引人的特点之一。 这个实时数据库托管在云端,以JSON格式存储数据,并与所有连接的客户端保持实时同步。 无论使用iOS、Android还是JavaScript SDK,连接到Firebase实时数据库的所有应用都共享同一个数据库实例,确保始终与最新数据同步。

Cloud Firestore是另一个值得关注的Firebase服务。 这是一个NoSQL文档数据库,旨在为全球范围内的移动和Web应用程序提供数据存储、同步和查询的便利。 通过创建存储相关数据的层级结构以及执行富有表达力的查询来检索数据,可以充分发挥Cloud Firestore的潜力。 查询的性能会随着结果集的大小而非数据集的大小进行扩展,这使得应用程序从一开始就具备可扩展性,无需等到需求超出容量时才考虑。

除了上述数据库服务,Firebase还提供托管服务、文件存储、函数服务(类似于AWS Lambda)以及更多其他功能。

创建API

API是为自己或其他第三方应用程序提供服务的一种方式。 Firebase允许您提供自定义服务,同时利用Firebase自身的服务,而无需搭建后端基础设施。 例如,您可以为第三方应用程序提供访问Firebase实时数据库的权限,以便查询工业传感器收集的数据。

要在Firebase中创建API,首先需要访问 Firebase控制台,点击“添加项目”并为新项目命名。 谷歌会询问您是否要为新项目启用Google Analytics。 建议您接受此建议,因为这将有助于您从API中获得A/B测试和各种统计报告等好处。

项目创建完成后,您就可以选择API将使用的Firebase服务。 为了演示,我们将探讨如何使用Firebase实时数据库服务。

在Firebase中设置实时数据库

在左侧导航栏的“开发”部分,点击“实时数据库”。 右侧会出现“创建数据库”按钮。 点击此按钮以在Firebase中创建您的第一个数据库。

接下来,您需要为新数据库选择地理位置。 选择最接近您用户的位置。 这对于最小化API延迟至关重要,尤其是在实时应用程序中。

下一步是配置数据库的基本安全规则。 您可以选择锁定模式,然后根据需要分配访问权限,或者选择启用所有读取和写入的测试模式。

为了避免一开始就使安全设置过于复杂,您可以选择测试模式。 您始终可以在之后创建规则以配置更精细的安全设置。

完成数据库配置后,相应的API也会在您个人控制台的Google Cloud Platform的API和服务部分启用。

编写Firebase API

至此,您已经在Firebase控制台中配置了项目的基础元素。 下一步是编写您的API代码。 为此,您需要在本地计算机上初始化Firebase Hosting和Functions。 您可以使用npm安装firebase-tools:

npm install -g firebase-tools

然后您可以登录到firebase并使用以下命令初始化您的项目:

firebase login firebase init

系统会显示一个欢迎界面,其中Firebase会提示您项目初始化的文件夹,并显示一个选项菜单。

在该菜单中,选择Functions和Hosting(Hosting选项允许您为要开发的API提供自定义URL)。 然后从列表中选择您先前创建的Firebase应用,之后您必须选择要使用的语言。 为了开发Web API,您可以选择JavaScript。

如果您要使用包依赖项,请在函数文件夹中使用npm安装它们。 然后您可以开始编写函数代码。 请确保包含firebase-functions和firebase-admin软件包,以及您可能需要的任何其他软件包:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

要使用实时数据库,您必须在初始化JavaScript SDK时指定其URL。 该URL可以在Firebase控制台的实时数据库部分找到,其格式如下:

https://<database-name>.<region>.firebasedatabase.app

您可以使用以下代码片段初始化您的SDK,替换成您项目配置对象中的相应数据:

var config = {
  apiKey: "apiKey",
  authDomain: "projectId.firebaseapp.com",
  databaseURL: "https://databaseName.firebaseio.com",
  storageBucket: "bucket.appspot.com"
};
firebase.initializeApp(config);
var database = firebase.database();

一旦您编写了API函数的代码,就可以进行部署了。 但在此之前,您需要在firebase.json中进行一些修改,添加以下代码行,并根据您的项目配置进行调整:

"rewrites": [
     {
       "source": "/api/v1/**",
       "function": "webApi"
     }
]

下一步是部署。 第一次需要进行完整部署,执行命令:

firebase deploy

在后续部署中,您可以使用–only functions参数只部署函数。

执行部署命令后,Firebase CLI会在终端中显示函数的HTTP端点的URL,您可以使用该URL从Web应用程序调用API。 该URL包含您的项目ID和HTTP函数的区域。 例如,以下URL可以通过传递参数itemid=1来调用项目查询函数:

https://us-central1-apiproject-8753c.cloudfunctions.net/itemQuery?itemid=1

要执行该函数,请在浏览器中打开带有相应参数的URL。

请注意,部署到生产环境需要订阅Firebase Blaze计划,即按需付费计划,具体信息可以在Firebase定价页面上找到。 这是一种后付费服务,这意味着您将在每个月底支付使用费用。

如果您没有Blaze订阅,部署命令将不会显示您的API URL。 相反,您会看到一条消息,提示您如果要部署到运行时环境,必须订阅Blaze计划。 在这种情况下,您仍然可以使用Firebase本地模拟套件在本地计算机上构建和测试应用程序,而无需将它们部署到Firebase生产环境。 本地测试有助于避免在应用程序开发过程中产生不必要的成本,因为每次测试运行都可能会在您的帐户上产生费用。

本地测试和原型制作

本地模拟套件工具提供了一个集成的用户界面,可以方便地进行原型设计和在本地计算机上测试应用程序。

通过模拟套件用户界面,您可以测试数据库设计、云函数工作流程、分析后端服务的性能并评估安全规则的更改,以及执行其他任务。 它本质上是一个安全沙箱,用于在将API功能部署到生产环境之前对其进行测试。

要模拟函数或在本地测试应用程序,请运行firebase emulators:start命令。 您需要安装Java才能使用Firestore模拟器。 如果没有安装,可以从 这里 安装。

当您调用Firestore模拟器时,该命令会返回一个URL,您可以在浏览器中打开模拟套件的用户界面。 默认情况下,此URL为localhost:4000,但在不同的机器上可能会有所不同。

您还将获得HTTP函数的完整URL。 该URL类似如下:

http://localhost:5001/apiproject-8753c/us-central1/itemQuery

唯一的区别在于它会包含您项目的名称、函数的名称,并且在您的本地计算机上,端口号也可能不同。

要测试该功能,请复制模拟器返回的URL,添加任何必要的参数(如?itemid=1),然后在浏览器的新标签页中输入它。 API执行的结果将显示在模拟套件的UI中。

在“日志”选项卡中,您将看到一条新的日志,指示itemQuery()函数已执行。 如果您的函数在Firestore数据库中生成新数据,您将在“Firestore”选项卡中看到它。

提高API的曝光率

如果您希望自己开发的API变得流行,Firebase也可以助您一臂之力。 不仅因为它能让您更快地构建应用程序,减少启动和运行后端服务的大量工作,还因为它能帮助您定位产品。 这是如何实现的呢? 原因在于,与Firebase相关的应用程序在搜索排名中往往高于其他应用。

此外,还要考虑Firebase的应用索引API。 该工具可以提高应用链接的搜索排名,帮助用户找到他们需要的内容。 它还会将安装按钮放置在您应用的主页按钮之后,以便感兴趣的用户只需单击一下即可成为您应用的用户。

总而言之,Firebase不仅为您提供可以显著加快API开发速度的后端服务,而且一旦API启动并运行并向世界展示,它还可以帮助您推广它并从中获益。