也许我的问题应该重申为:我如何将这些行为重构为 CRUD,而这正是 Firebase 所擅长的?
我知道 CRUD 运行良好。我还看到 Firebase 声明式安全模型如何让我确保适当的安全服务器端,它应该存在。
假设我有一个订阅服务。每次有人注册一项服务时,他们都需要自动将“到期”行项目添加到他们的帐户中。简单来说:
/users/john
/services/goodstuff
所以
john
可以报名goodstuff
,我可能让他进 30 天不付款,但会在 30 天到期时提醒他,“嘿,您需要付款,否则您将失去对商品的订阅。”使用服务器后端,我会
POST
至 /services/goodstuff/members
,例如,拥有 POST
的一部分处理程序向 john
添加“您欠”行项目的账号,确保没有人可以加入goodstuff
没有被标记为欠款。在 Firebase BaaS 应用程序中,这些服务器端逻辑不存在,我将如何重构应用程序以获得相同的有效行为?
最佳答案
更新(2017 年 3 月 10 日) :虽然我在下面概述的架构仍然有效并且可用于将 Firebase 与任何现有基础架构相结合,但 Firebase 刚刚发布 Cloud Functions for Firebase ,它允许您在 Google 的服务器上运行 JavaScript 函数以响应 Firebase 事件(例如数据库更改、用户登录等)。
一种潜在的解决方案(未经测试,抱歉;但这应该是正确的想法):
{
"rules": {
"users": {
"$user": {
/* When they create their user record, they must write a 'due' that's
* within the next 30 days. */
".write": "!data.exists() && newData.child('due').isNumber() && newData.child('due').val() < now + (30*24*60*60*1000)"
}
},
"services":
"$service": {
/* Must be authenticated and due date must not be passed. */
".read": "auth != null && now < root.child('users/' + auth.id + '/due).val()"
}
}
}
}
这将要求当有人第一次登录并初始化他们的用户/条目时,他们必须在接下来的 30 天内写一个截止日期。然后在访问任何服务时,将验证该截止日期尚未过去。也就是说,另一种选择是启动一个小型后端服务来处理这种业务逻辑。 Firebase 擅长保护、存储和同步数据。但如果您有复杂的业务逻辑,您可能需要考虑启动一个小型后端流程。 Firebase 有一个 REST api以及 Node.JS和 JVM客户端,因此运行您自己的与 Firebase 集成的后端代码非常容易。
关于firebase - 如何使用 Firebase 处理自动服务器端计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17906452/