首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解google云功能的Firebase和用途

了解google云功能的Firebase和用途
EN

Stack Overflow用户
提问于 2018-01-22 17:39:49
回答 3查看 349关注 0票数 3

假设我正在开发像Instagram这样的应用程序:用于iOS、安卓和网络。我决定使用,因为它看起来确实简化了工作。

用户在应用程序中需要的功能如下:

  • 授权/登记
  • 上传照片
  • 寻找其他人,跟踪他们,看他们的照片

我来自传统的“自有后端”开发,在那里我确实需要设置一个服务器,创建数据库,最后编写API让前端从服务器检索数据。这就是为什么我不清楚它是如何在Firebase中工作的。

因此,问题是我如何创建这样的应用程序:

  1. 我应该用云函数创建自己的API吗?或者可以直接从客户端处理数据库?
  2. 如果我直接使用数据库,为什么需要云功能?我应该用它们吗?

很抱歉有这么愚蠢的问题,但这真的很难从零开始。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-22 18:39:30

Firebase与传统设置的主要区别在于,对于应用程序开发人员来说,对于应用程序开发人员来说,客户端可以直接访问数据库,而不需要中间自定义API层。Firebase以各种语言提供SDK,这些语言通常用于获取所需的数据/提交数据更新。

您也有可以使用服务器端的admin,但这些都是为了运行一些自定义业务逻辑--例如分析、外部服务中的缓存--而不是用于实现数据获取API层。

这有两个重要后果:

  1. 您必须定义安全规则,以控制谁可以在数据库中的哪些路径上读写。这些安全规则是在项目级别上定义的,依赖于经过身份验证的用户(使用Firebase身份验证)。通常,如果您将用户配置文件存储在路径users/$userId中,您将定义一条规则,说明只有在经过身份验证的用户具有$userId id的情况下,才能将此节点写入。
  2. 您必须以一种易于读取的方式构造数据--不需要复杂的数据库操作,例如Firebase不支持的联接(您确实有一些有限的查询选项很难)。

这两点允许您跳过传统API的两个主要角色:验证访问和获取/格式化数据。

云功能允许您对数据更改作出反应。假设每次创建新用户时,您都希望向他发送欢迎电子邮件:您可以定义一个云函数,每次在users路径附加一个新节点时发送此电子邮件。它们允许您在写入时运行通常在服务器端运行的代码,因此它们可以有非常广泛的用例:副作用(如发送电子邮件)、外部服务中的缓存数据、在Firebase中缓存数据以便于读取和分析等。

票数 4
EN

Stack Overflow用户

发布于 2018-01-22 18:25:14

  1. 您并不真正需要服务器,只要您的用户经过身份验证并在Firebase上定义了合理的安全规则,您就可以直接从客户端访问数据库。
  2. 例如,在用例中,当有人上传照片时,您可以使用云函数创建缩略图(Firebase函数包含了ImageMagick ),也可以使用云函数对数据进行去定向,以使应用程序更快,或者生成日志。因此,在数据库或存储发生变化时,只要需要进行服务器端处理,基本上就可以使用它们。但是我发现云功能很难开发和调试,还有其他选择,比如创建一个Node应用程序,它订阅数据中的实时更改并对其进行处理。缺点是您需要在Firebase之外托管它。
票数 3
EN

Stack Overflow用户

发布于 2018-01-22 18:40:13

我的答案是绝对不是完全或专业的,但以下是我选择Cloud Functions的原因

性能

您刚才提到您正在编写一个类似instagram的移动设备应用程序,然后我假设人们可以评论其他人的照片,也可以查看这些评论。如何从数据库下载评论并将其显示在用户的设备上?我的意思是,有可能有成百上千的评论,在一个帖子,你将需要分页你的结果。为什么不让服务器做所有的艰苦工作,释放用户的设备,等待结果?这似乎不太好,但让我们面对它,如果你的应用非常成功,你将有数百万用户,数百万评论,你需要处理,服务器将比手机做得更好。

安全

如果您的项目很小,那么您确实不会担心性能,但是安全性呢?如果您在客户端执行所有操作,则基本上允许每个设备连接到数据库,这意味着每个设备都可以从数据库中读取/写入数据库。一旦恶意用户发现了您的数据库url,他所要做的就是

代码语言:javascript
复制
firebase.database().ref(...).remove();

使用1行代码,您将丢失所有数据。好吧,如果你说的话,我会想出一些好的安全规则,如下所示:

这意味着,每个帖子,只有该帖子的所有者可以对其进行任何修改或阅读,其他人被禁止做任何事情。这很好,但不现实。人们应该能够评论帖子,那就是修改帖子,这条规则不适用于这种情况。但是,如果你让每个人读/写,那就不安全了。那么,为什么不让.read.write变成假的,就像这样:

它是100%安全的,因为没有人能对你的数据库中的任何东西做任何事情。然后,编写一个API来对数据库执行所有操作。API限制了可以对数据库执行的操作。您有编写API的经验,我相信您可以做一些事情来增强API的安全性,例如,如果用户想删除他在deletePost API中创建的帖子,您应该首先对用户进行身份验证。这样,“任何人”都不会对你的数据库造成任何损害。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48387308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档