我目前正在开发一个新的Google聚合物网络应用程序,并想知道我是否应该使用firebase作为后端/数据库。我看了一下这个项目,制作了一些测试应用程序,非常喜欢它!但要完全说服我,那个火力山是我要走的路,我需要回答以下问题:
我对安全性有点担心:所以,我知道,firebase使用read,write和validate来实现服务器端安全性。从样本中,我注意到验证基本上是一个单行的JS脚本,代表一个'if'。由于我打算构建一个Web电子商务应用程序,我需要验证一些输入。是否有可能将验证外包在一个单独的文件中,以使其更具可读性?另外,我想知道,如果有可能,测试这些服务器端验证,例如单元测试?
我目前还不是百分百确定,firebase可以涵盖我们所有的用例。对于某些关键功能使用“正常”后端然后将后端数据保存在firebase中是否可能/一个好的解决方案?
我看到一些很好的聚合物元素用于firebase。聚合物/网状组件是否100%支持firebase?
是否有其他方法(如Java方法)来实现服务器业务逻辑?
有没有办法定义更新脚本,以便可以轻松地将新版本推送到生产阶段?
谢谢&亲切的问候
马克
答案 0 :(得分:4)
所以,我问火柱支持并得到以下答案:
很高兴认识你。
您可以使用我们的安全规则语言实施极其复杂和有效的规则。您可以将安全规则部署为托管部署过程的一部分,也可以通过REST API部署。无法将内容分解为服务器上的多个文件,但您当然可以构建自己的流程,将多个文件合并为一个JSON结果。
一般来说,同步Firebase和SQL后端并不是很实用,并且不能很好地翻译。它也可能完全是多余的。
我不知道在这种情况下100%支持的含义。我们提供JavaScript SDK,因此它们可以一起玩。
我们提供Java,Objective-C / Swift,Android,Node.js,JavaScript和REST API的官方SDK,以便与其他语言一起使用。
我不确定这意味着什么。很可能答案是否定的,因为我们不提供构建过程或任何工具来发布您的软件。
我希望有所帮助!
我回答:
感谢您提供的信息,它对我非常有帮助!在阅读了关于问题5的回答后,又出现了一个问题: ... 5.有没有办法定义更新脚本,以便可以轻松地将新版本推送到生产环境? 我不确定这意味着什么。很可能答案是否定的,因为我们不提供构建过程或任何工具来发布您的软件。
是否有关于如何处理数据库架构的最佳实践?在我的案例中,我只有一个Web应用程序(没有应用程序等)...我希望,数据库会随着时间的推移而发生巨大变化。我是否应该编写JS逻辑,检查当前数据库版本并更新它,如果有必要的话?也许这会成为一个很好的功能......
例如:我部署了应用程序的1.0版,一切正常。经过3个月的编程后,我注意到用户数据需要另一个属性:地址,这是一个非空的'属性。我现在部署了我的应用程序的2.0版本,并且每个新注册用户都有一个地址,但旧用户(来自版本1.0)没有此字段或值。
我该如何处理?
支持已回复:
嗨马克,
这里没有最好的做法,但你的想法似乎相当合理。您可能不需要签入JavaScript。您可以在用户的配置文件中存储版本号,当它们升级到最新软件时,您可以在其配置文件数据中升级它。
然后您的验证规则可能会使用以下内容:
{
"user": {
".write": "newData.hasChild('address') || newData.child('appVersion') < 4",
"address": {
".validate": "newData.isString() && newData.val().length < 1000"
}
}
}
因此,如果您担心版本控制,可以使用它来处理旧版本。
我从开发人员那里看到的另一种流行方法是通过复制数据来进行中间升级。因此,您发布了一个中间版本,该版本使用更新的数据结构写入旧路径和新路径(这使得应用程序可以保留旧用户,直到升级为止)。一旦合理百分比的客户端升级,然后发布最终版本,不再对旧结构和新结构进行双重写入。
当然,由于模块化数据结构更容易适应变化,因此平坦化数据会使连接和获取数据变得更加困难,这将使升级变得更加容易。当然,一个实用的设计,你将各种记录包装在一个类中(例如,带有getter / setter方法的UserProfile类)使转换变得更简单,因为你可以轻松地在一个地方进行版本控制。
希望这有助于某人:)