Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解Firebase和google云功能的用途_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

了解Firebase和google云功能的用途

了解Firebase和google云功能的用途,firebase,firebase-realtime-database,google-cloud-functions,Firebase,Firebase Realtime Database,Google Cloud Functions,比如说,我正在开发像Instagram这样的应用程序:用于iOS、Android和Web。我决定使用GoogleFirebase,因为它看起来确实简化了工作 用户在应用程序中需要的功能包括: 授权/注册 上传照片 搜索其他人,跟踪他们并查看他们的照片 我来自传统的“自己的后端”开发,我确实需要设置一个服务器,创建数据库,最后编写API,让前端从服务器检索数据。这就是为什么我不清楚它在Firebase中是如何工作的 所以问题是我如何创建这样的应用程序: 我应该用云函数创建自己的API吗?或者可

比如说,我正在开发像Instagram这样的应用程序:用于iOS、Android和Web。我决定使用GoogleFirebase,因为它看起来确实简化了工作

用户在应用程序中需要的功能包括:

  • 授权/注册
  • 上传照片
  • 搜索其他人,跟踪他们并查看他们的照片
我来自传统的“自己的后端”开发,我确实需要设置一个服务器,创建数据库,最后编写API,让前端从服务器检索数据。这就是为什么我不清楚它在Firebase中是如何工作的

所以问题是我如何创建这样的应用程序:

  • 我应该用云函数创建自己的API吗?或者可以直接从客户端使用数据库
  • 如果我直接使用数据库,为什么我需要云功能?我应该用它们吗
  • 很抱歉问了这么愚蠢的问题,但真的很难从头开始

  • 您实际上不需要服务器,您可以直接从客户端访问数据库,只要您的用户经过身份验证,并且您在Firebase上定义了合理的安全规则

  • 例如,在您的用例中,您可以使用云函数在有人上传照片时创建缩略图(Firebase云函数中包含了ImageMagick),或者对数据进行非规范化以加快应用程序的速度,或者生成日志。因此,基本上,当数据库或存储发生更改时,只要需要进行服务器端处理,就可以使用它们。但我发现云功能很难开发和调试,还有其他选择,比如创建一个节点应用程序,订阅数据中的实时更改并对其进行处理。缺点是您需要在Firebase之外托管它


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

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

    这有两个重要后果:

  • 您必须定义安全规则来控制允许谁在数据库中的哪些路径上读/写。这些安全规则是在项目级别定义的,依赖于经过身份验证的用户(使用Firebase身份验证)。通常,如果您将用户配置文件存储在路径
    users/$userId
    ,您将定义一条规则,说明只有经过身份验证的用户的id为
    $userId
    时,才能写入此节点
  • 您必须以易于读取的方式构造数据,而不需要复杂的数据库操作,例如Firebase不支持的连接(您确实有一些有限的查询选项)
  • 这两点允许您跳过传统API的两个主要角色:验证访问和获取/格式化数据


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

    我的答案肯定是不完整或不专业,但以下是我选择
    云功能的原因

    性能

    你提到你正在编写一个类似instagram的移动设备应用程序,那么我假设人们可以评论别人的照片,也可以查看这些评论。您希望如何从数据库下载评论并将其显示在用户设备上?我的意思是,在一篇帖子上可能会有成百上千的评论,你需要对你的结果进行分页。为什么不让服务器做所有的艰苦工作,释放用户的设备,等待结果呢?这看起来并没有多大的改善,但让我们面对现实,如果你的应用程序非常成功,你将有数百万用户,数百万条评论需要处理,服务器将比手机做得更好

    安全性

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

    firebase.database().ref(...).remove();
    
    使用一行代码,您将丢失所有数据。好吧,如果你说,那么我会想出一些好的安全规则,比如下面的规则:

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

    它是100%安全的,因为没有人可以对数据库中的任何东西做任何事情。然后,编写一个API来对数据库执行所有操作。API限制了可以对数据库执行的操作。你有经验吗