构建一个CMS,并尝试找出使用Firebase处理草稿的最佳方法。例如,站点管理员将编辑文档,这些文档将公开发布到站点。
起初,似乎完美的解决方案是将"public“属性设置为true,并通过如下安全规则强制执行它:
{
"rules": {
"documents": {
"$id": {
".read": "data.child('public').val() == true"
}
}
}
}
(如此处所述:https://www.firebase.com/docs/security/rule-expressions/data.html)
但很明显,这个文档是有缺陷的,因为在这个例子中,我可以点击/documents,它会给我所有的文档,而不管'public‘==是真的。为了防止出现这种情况,您必须将其更改为:
{
"rules": {
"documents": {
".read": false,
"$id": {
".read": "data.child('public').val() == true"
}
}
}
}
理想情况下,我可以为/ documents /公开一个简单的REST API端点,它只返回所有公共文档及其所有子属性。
显然,Firebase不支持过滤(这本质上就是我试图通过说"SELECT * FROM document WHERE public = true“来实现的。
所以我看到了两个选择:
选项1:通过将文档草稿存储在不同的位置(如/draft/ document )来保持REST API端点的整洁。管理员可以创建和编辑具有自动保存功能的草稿文档,然后有一个“发布”按钮,当点击该按钮时,会将当前草稿复制到公共/documents。
选项2:不使用干净的REST API端点/documents,而使用/documentIndex,它只返回一个文档ids列表。然后,客户机必须遍历每个文档,以调用/ documentIndex /:id处的每个单独的文档端点。我担心这个选项的性能。这个选项似乎记录在这里:Firebase data normalized. How should I fetch a collection based on this structure?,但没有涵盖对REST API的影响。我使用的是AngularJS,但其他客户机可能希望以其他方式使用文档数据(这也是我希望通过REST API公开数据的原因)。
有什么想法?
发布于 2014-06-02 17:18:03
这两种方法都很好。当结构和排序经常改变或存在多种排序可能性时(例如,有时按日期排序,有时按排名排序的列表),索引更加灵活。额外的侦听器实际上对性能没有太大影响(通常不会比获取字节所需的时间多很多)。
在路径之间移动数据,一种队列或文件夹方法,可能会很好地满足您的需求,因为您已经强调了REST访问。如果与您的特定用例不同,您希望批量移动大量数据(几百兆),那么这将不是一个很好的方法,因为它需要将数据下载到客户端,然后再将其写回新路径。
如果您的目标是针对可能的其他客户端进行优化,那么您需要从确定这些客户端是什么以及它们将如何连接开始。纯粹基于可能性很难做出任何明智的决定。
在进行任何纯粹针对REST的优化之前,我首先尝试一下分析,看看它的性能如何。您可能会发现,对于您脑海中的用例,这已经足够了。
https://stackoverflow.com/questions/23992696
复制相似问题