作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
菲利普·爱德华兹的头像

Phillip Edwards

Phillip在软件开发的各个方面都有丰富的经验. 最近,他一直在使用Google Firebase开发应用程序.

Previously At

Okta
Share

移动和web应用程序通常需要一个后端服务器. Web应用程序需要Web服务器来交付内容. 应用程序还需要存储用户配置文件和媒体,如图像和视频. 应用程序和服务器之间的通信通常使用API完成, which is usually REST.

应用程序是用一系列语言编写的. iOS应用程序是用Swift或Objective-C编写的. Android应用是用Java或Kotlin编写的. Web应用程序是用HTML编写的, CSS, JavaScript, 通常是复杂的框架,比如Angular或React. 前端开发人员需要了解相关的语言及其相关的开发工具.

后端服务器是用多种语言编写的,包括Go、Java、PHP和Python. 每种语言都有自己的库套件,以方便编写复杂的应用程序.

大多数开发人员认为自己是前端或后端开发人员. 精通这两种角色的全栈开发人员相对较少.

运行和维护后端服务器有其自身的挑战. 服务器需要构建、更新和备份. 还需要保护服务器,以防止意外或恶意数据丢失或访问敏感数据. In addition, 服务器需要分配主机名和IP地址,以便连接到它们.

What Is Firebase?

Firebase 最初是一个移动信息架构,后来被谷歌收购. 它已经发展成为一个超过25个组件的套件,可以与 Google Cloud Platform.

Firebase由软件开发工具包(sdk)组成, 它允许移动和web开发人员简单地访问云功能, securely, and reliably. 它们会自动补偿较差的网络连接. 有一个用于启用、管理和保护组件的Firebase web控制台. 还有命令行工具和REST api供更深入的使用.

有些Firebase组件比其他组件更知名. 组件之间几乎没有依赖关系, 哪一个允许增量采用功能. Firebase身份验证和分析是最广泛使用的.

Firebase已经发展成为一个平台,允许移动和web前端开发人员开发完整的应用程序,而不需要后端服务器. 最近的增强极大地促进了无服务器解决方案,它提供了一个可行的, scalable, 云虚拟机服务器解决方案的经济高效替代方案.

Firebase定价和计费计划

Firebase的基本计费计划名为Spark,是免费的. 云资源的使用是有限制的,但它们是相当慷慨的. 运行一个合理大小的应用程序而不产生任何费用是可能的.

一个网站最多1GB的内容和少于10GB/月的传输可以托管在Spark计划下. Firestore允许高达1GB的数据和网络流量高达10GB/月. 云存储限制为数据最多5GB,下载最多1GB/天.

如果应用程序需要更多资源,则需要付费计费计划,例如按需付费. Spark计划免费限制仍然适用. 收费相当低. 价格可以在 Firebase pricing page.

在云中运行的虚拟机在运行时会产生费用, 即使它们没有被使用. Firebase无服务器解决方案可扩展到零. 这意味着资源实际上只在使用时运行,而在不使用时不会产生费用. 这对于季节性业务(如假日租赁)或定期活动(如音乐会)的应用程序是理想的. 会有很多活动,然后是几个月的不活动.

How to Set Up Firebase

需要使用电子邮件账号进行认证. 最好使用谷歌邮箱帐户. They can be created at http://mail.google.com.

还需要一个谷歌云平台(GCP)帐户. 可以免费试用 here. 这给了你300美元的信用额度,一年可用. 需要信用卡作为身份证明. 谷歌可能收取1美元,然后退款. 如果启用了计费并使用了可计费资源,则信用卡将按月借记. 还有一些谷歌提供商公司充当结算的中介. 你为云服务付费给供应商,他们再付钱给谷歌. 他们有自己的计费计划,可能会提供免费试用.

经常监视云控制台的计费部分以监视使用情况非常重要. 在不需要时,很容易保持存储等资源的活动状态, 随着时间的推移,哪一种会产生相当大的成本.

Firebase项目也是GCP项目. 您可以创建GCP项目并将其导入Firebase, 或者创建一个Firebase项目, 这也将创建一个GCP项目. The Firebase console is here.

不同类型的应用程序需要不同的设置. 主要是Android、iOS和web应用程序. 安装说明可以在官方的 Firebase Guides.

某些操作需要使用Firebase命令行工具. These require that Node.js and the npm tool are installed. 如果在macOS或Linux上运行,则 npm 命令将需要使用 sudo.

NPM安装-g firebase-tools

身份验证和授权

Firebase身份验证可能是使用最广泛的Firebase组件. 用户可以选择一种或多种身份验证机制. 这些是电子邮件地址和密码, telephone numbers, 以及联合身份提供商谷歌, Facebook, Twitter, and GitHub. 可以启用任意数量的身份验证机制.

Firebase UI提示用户使用的机制:

Firebase authentication

Firebase提供了用于身份验证的用户界面,可以通过客户端的几行代码调用. 也有用于手动进行身份验证的api. 验证成功, 生成一个身份令牌,可用于后端验证.

这些api允许管理用户以编程方式管理用户. Operations include:

  • 创建、更新和删除用户
  • 通过电子邮件地址或电话号码等搜索条件查找用户
  • 访问信息,如帐户创建日期和最后登录日期和时间
  • 验证电子邮件地址和电话号码,而不必使用现有的工作流

大多数移动和web应用程序都需要大量用户登录它们的应用程序. For example, 任何拥有谷歌邮箱账户的人都可以向任何允许谷歌身份验证的应用程序验证自己. 需要一种授权形式来限制特定用户对应用程序的访问. 这可以通过在数据存储中存储电子邮件地址和访问角色之间的关联来轻松实现. 身份验证成功后,将在数据存储中查找电子邮件地址. 是否存在具有正确角色的用户, then access is granted; otherwise, 强制注销用户.

Firebase Hosting

Firebase托管允许静态web内容, 其中包括JavaScript, 在云中托管而不需要web服务器. 内容被缓存在全局内容分发网络(CDN)的边缘。. 这允许从世界任何地方快速访问内容.

通过将一个或多个网站添加到Firebase项目的托管部分,可以在Firebase控制台中托管它们. 内容通过SSL传递,并给出两个形式为[http://site-name]的url.web.app] and http://site-name.firebaseapp.com, where site-name 是项目名称还是用户指定的站点名称.

如果您可以更改域名的DNS记录,那么从您自己的域名托管站点是非常容易的. 在Firebase控制台将域名添加到站点. 然后,您将得到一个DNS TXT记录, 你必须将其添加到域名的DNS中,以向谷歌证明你拥有该域名. TXT记录显示后,即可获取局点的DNS A记录. 自动为站点发放SSL证书. 一旦提供了证书,该站点就可以在全局范围内使用. 原则上,DNS更新和证书供应可能需要几个小时. 在实践中,这个过程可以在20分钟内完成.

要向主机添加内容,首先,为站点和创建一个目录 cd 从命令行输入. 接下来,登录Firebase并初始化项目目录.

firebase login
firebase init

系统将提示您选择一个项目以及需要哪些客户端服务. 服务总是可以在以后添加,而不必在这个阶段进行选择.

Create a file called firebase.json,它定义了网站根目录和要排除的文件. You will also need a .gitignore 文件从版本控制中排除文件.

{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}

然后,将静态内容复制到公共目录中. 最后,将站点部署到云中.

firebase deploy

要更改web内容,只需更改内容文件并发出deploy命令. 每个部署在Firebase控制台中显示为一个版本. 只需单击一下就可以回滚到以前的版本.

Firebase Hosting还可以将uri重写为文件、云功能和云运行. This greatly 简化了事情,因为不需要为这些服务分配域. The rewrites are 通过向firebase的托管部分添加重写部分来定义.json. The hosting 如果服务不存在,部署将失败.

{
	"hosting": {
		"public": "public",
		"rewrites": [
		{
			"source": "/xxx",
			"destination": "/profile.html"
		},
		{
			"source": "/yyy",
			"function": "profile"
		},
		{
			"source": "/api{,/**}",
			"run": {	
				“serviceId”:“云api”,
				"region": "europe-west1"
			}
		}
		]
	}
}

Data Storage

Firebase提供了用于访问基于云的数据存储的客户端api. 存储有三种类型:

  • Realtime Database
  • Cloud Firestore
  • Cloud Storage

这使得移动和web客户端无需服务器就可以存储和检索数据.

Realtime Database

实时数据库是一个云托管的NoSQL数据库. 实时数据库中的数据会自动实时同步到所有连接的设备上. 它可以跨平台运行于Android, iOS和web. 数据存储为JSON树结构. 可以设置安全规则来控制对数据的读和写访问.

每个设备都保留数据库的本地副本. 这意味着数据在未连接到网络时可用. 在重新连接时,数据的本地副本和基于云的副本将同步.

数据由使用侦听器的应用程序读取. 侦听器侦听JSON树中的节点. 在控制台上或由其他用户更改数据时, 使用新数据值调用侦听器回调. 实时数据库也支持查询. 每个查询返回一个节点及其所有子节点.

默认情况下,安全规则不允许访问数据. 规则可以全局添加,也可以添加到JSON对象的单个节点. 安全规则控制对数据的读写访问,并可以执行验证.

实时数据库最适合于不需要深度嵌套数据结构的小块数据. 免费限制是1GB的数据.

Cloud Firestore

Cloud Firestore被视为实时数据库的替代品. 它扩展了实时数据库的功能. 数据不在JSON树中,而是在文档的分层集合中. 每个文档由一组键值对和可选子文档组成. 查询允许更复杂的过滤和排序,并且只返回完整的文档. 查询不返回子文档.

云Firestore将很快取代云数据存储. 它可以在数据存储模式或本机模式下运行 mode. 所有数据存储应用程序将自动迁移到Cloud Firestore.

Cloud Firestore最适合相对较小的数据块. 它可以有一个深度嵌套的数据结构. 免费限制是1GB的数据.

Cloud Storage

云存储用于存储图像和视频剪辑等文件. 移动和web客户端可以使用Firebase直接从云端上传和下载文件,而不需要后端服务器. 免费限制是5GB的数据.

Cloud Functions

云功能是创建无服务器应用程序的重要技术. 云函数可以用JavaScript编写, TypeScript, Python, or Go, 直接部署到谷歌云上. 函数由HTTP请求或云中的事件触发,例如写入云存储.

一个云函数一次只能处理一个请求, 但是云会自动通过复制来扩展功能. 用Python编写的云函数使用Flask库来处理HTTP请求. 该函数接受一个请求对象作为参数,并返回响应体.

一个简单的Python Cloud Function需要一个工作目录,入口点在文件中 main.py.

def simple_cloud_function(请求):
    return "It worked"

依赖关系由pip管理,并放入一个名为 requirements.txt.

Flask==1.0.2

方法部署功能 gcloud command line tool. 它指定函数名、语言和触发器.

Gcloud函数部署simple_cloud_function——runtime python37 \ 
       --trigger-http

该函数的URL在部署时显示,可以通过运行describe命令找到.

Gcloud函数描述simple_cloud_function
Url: http://europe-west1-project-id.cloudfunctions.net/simplecloud_function

云函数可以调用Google Cloud和Firebase api来提供后端功能. 它们提供关于执行启动和执行时间的日志信息. 可以很容易地添加额外的日志记录. 日志可以在Stackdriver Logging UI中查看,也可以通过 gcloud command line tool.

Gcloud函数日志读取simple_cloud_function 

功能可以在Google Cloud Console中查看和删除.

谷歌云控制台:功能

云函数最适合用于相对不频繁发生的操作. 一个使用示例是在将图像上传到云存储时创建缩略图. 免费的上限是每月125,000次调用.

Cloud Run

Cloud Run是最近添加的功能,极大地促进了无服务器应用程序. 它使Docker容器能够在云中运行,而无需进行复杂的基础设施设置. 它可以在托管模式下运行,这种模式使用Knative运行时,Knative运行时构建在Kubernetes上. It can also run on Anthos, 它也构建在Kubernetes上,但允许容器跨云运行,甚至在你自己的数据中心上运行. 不需要设置和管理Kubernetes集群,因为这一切都是自动完成的.

任何可以构建到Docker镜像中的应用程序都可以通过Cloud Run进行管理. 它会根据需求自动扩展容器的数量. 当服务不被使用时,它也会缩减为零. 未使用的服务不收取任何费用.

如果要响应HTTP请求,Docker容器需要运行web服务器. Python服务将使用Flask. 入口就在里面 app.py.

从flask中导入flask

app = Flask(__name__)

@app.route(’/api/profile’)
def profile():
	page = ’’’
Page content
	’’’
	return page

The application needs a Dockerfile to create the image.

FROM python
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . .
ENV PORT 8080
运行pip安装Flask gunicorn firebase-admin
CMD exec gunicorn——绑定:$PORT——工人1——线程8 app:app

Cloud Run容器直接部署到云中.

Gcloud运行deploy——image=image_name——platform=managed \
       ——区域= europe-west1——允许匿名  

If the service name, platform, region, 或者是否允许未经身份验证没有在项目配置中定义或在命令行上提供, 他们将被提示. Once 部署完成后,将显示服务URL. URL也可以通过命令获取 the gcloud command.

gcloud run services list
  最后一次部署的服务区域url
   Cloud-api europe-west1 http://cloud-api-h42ifbxkyq-ew.a.run.app myemail@gmail.com 2020-02-05T10:53:30.006Z

URL包含一个难以管理的随机数. 这就是Firebase Hosting重写规则变得最有用的地方.

可以在Google Cloud Console中查看和删除服务.

Google Cloud Console: Services

Cloud Run非常适合托管REST API. 每月免费限额是180英镑,000 CPU seconds, 360,000 GB seconds of memory, 2 million requests, and 1GB network egress. 免费网络出口限制仅适用于该服务部署在北美地区的情况.

Authentication

By default, Cloud Functions和Cloud Run容器是公开的,互联网上的任何人都可以访问. 在Cloud Console中使用IAM规则, 服务可以仅限于项目成员, Google Groups, 个人邮箱地址.

如果有限制,则禁止未经授权的访问. 要启用访问,必须向请求标头添加标识令牌. 身份令牌可以通过gcloud命令获取,也可以在Firebase认证过程中获取.

Gcloud认证打印身份令牌

需要一个Authorization头.

授权方式:承载id-token

Summary

谷歌云平台和Firebase提供了一系列产品,极大地促进了移动和web应用程序的开发. 通过允许客户端直接访问云功能或使用cloud Functions或cloud Run将后端代码部署到云中,可以完全消除对后端服务器的需求.

现有的应用程序可以增量地迁移到无服务器. In fact, 技术发展的方式可能意味着传统的基于虚拟机的服务器解决方案将不再是必要的.

Understanding the basics

  • What apps use Firebase?

    需要用户身份验证、数据存储、消息传递和使用统计的应用程序.

  • Firebase只适用于移动应用吗?

    不,它也可以用于网络应用和管理应用.

  • Firebase的优势是什么?

    它提供了许多应用程序需要的开箱即用、易于使用的功能.

  • Firebase的目的是什么?

    它旨在允许移动和web前端开发人员访问基于云的服务器功能,而不需要服务器.

  • 什么时候应该使用Firebase?

    在开发新应用程序或增强现有应用程序时,请考虑使用Firebase.

就这一主题咨询作者或专家.
Schedule a call
菲利普·爱德华兹的头像
Phillip Edwards

Located in Marseillan, France

Member since October 10, 2018

About the author

Phillip在软件开发的各个方面都有丰富的经验. 最近,他一直在使用Google Firebase开发应用程序.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

Previously At

Okta

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

Toptal Developers

Join the Toptal® community.