Firebase&;图形ql
有人有GraphQL和Firebase的经验吗? 我认为可以将firebase调用放在相关字段的解析器中,将一些变量从组件的props传递到查询的参数中Firebase&;图形ql,firebase,firebase-realtime-database,graphql,graphql-js,Firebase,Firebase Realtime Database,Graphql,Graphql Js,有人有GraphQL和Firebase的经验吗? 我认为可以将firebase调用放在相关字段的解析器中,将一些变量从组件的props传递到查询的参数中 如何使用GraphQL在Firebase中插入新数据?您必须使用Firebase吗?有一些特定于GraphQL的服务可以提供您所需要的。是一家YC联谊会公司,看起来特别有前途,给你一个firebase般的体验,但它是由GraphQL提供动力的 TL;DR:GraphQL在Firebase不足的地方发光。强大的数据建模、灵活高效的查询和开放规范都
如何使用GraphQL在Firebase中插入新数据?您必须使用Firebase吗?有一些特定于GraphQL的服务可以提供您所需要的。是一家YC联谊会公司,看起来特别有前途,给你一个firebase般的体验,但它是由GraphQL提供动力的 TL;DR:GraphQL在Firebase不足的地方发光。强大的数据建模、灵活高效的查询和开放规范都是Firebase所缺乏的GraphQL的基本部分 强大的数据建模 基于有限的数据建模,Firebase受到了很多批评。基本上,您的数据被构造为一个巨大的JSON,多次声明相同的数据。当您需要更新数据时,一开始看似方便的操作会导致无法管理的客户端代码,因为您必须手动跟踪对相同数据的所有引用 另一方面,GraphQL中使用的数据结构非常直观,并且非常熟悉,因为它是作为一个图形建模的。通过使用,我们可以很容易地描述我们的数据模型,称为GraphQL模式。对于Twitter应用程序,模式可能如下所示:
type Tweet {
id: ID!
title: String!
author: User! @relation(name: "Tweets")
}
type User {
id: ID!
name: String!
tweets: [Tweet!]! @relation(name: "Tweets")
}
在这里,我们定义了两种类型Tweet
和User
,它们具有一些标量属性,并且User
和Tweet
之间存在一对多关系。单个数据项被称为节点,一个用户节点可以连接到多个tweet节点。这种数据结构既简单又灵活,不同于Firebase的JSON方法
灵活高效的查询
GraphQL灵活的查询功能是其主要优点之一。查询是分层的,这意味着您可以指定反映图形结构的数据需求。在我们的Twitter示例中,我们可能有一个查询来获取所有用户及其推文:
query {
allUsers {
id
name
tweets {
title
}
}
}
请注意,我们可以自由地包含或省略要查询的字段,甚至可以跨关系查询。这意味着我们既不需要执行多个查询,也不需要查询不需要的数据,这使得GraphQL查询非常高效
将查询参数添加到混合中,我们可以添加诸如自定义顺序或过滤器之类的功能来获得
所有这些都是Firebase无法做到的
实时数据
Firebase的实时功能使它如此受欢迎,但由于GraphQL社区即将进入,Firebase的最大优势也随之消失。我建议使用GraphQL订阅来更好地理解底层概念
结论
因此,回答您的问题:GraphQL在大多数方面都优于Firebase,因此成为首选
如果您对GraphQL感兴趣,我建议您看看它将GraphQL的优点与强大功能(如内置身份验证和灵活的钩子)结合起来,或者使用其他无服务器功能来实现自定义业务逻辑
免责声明:我在GraphTool工作:)要回答您的问题,有三种方法可以解决这个问题 1.Firebase和GraphQL 如果您打算使用Firebase,那么可以将Firebase的API一对一映射到GraphQL查询和变体中 您当然可以将Firebase API封装到GraphQL解析器中,并以这种方式进行调用: 本质上,您在这里所做的是使用Firebase作为数据库,它一直工作到您想在解析器中以关系方式查询数据为止。如果不能在数据存储上的服务器端执行连接,您将在解析程序中向Firebase发出大量的往返请求,以满足单个请求 大多数人使用Firebase的原因是它的实时功能,而不仅仅是作为数据存储,因为这方面的数据关系建模工具相当缺乏。这样,您可能最好使用不同的数据源迁移到GraphQL 2.GraphQL后端即服务 <> P>考虑到你喜欢使用Firebase之类的BAAS产品,你可以考虑切换到图形化的BAAS。 3.自托管GraphQL 如果您愿意使用自己的数据存储转换为自托管解决方案,那么这也有很多好处。以下是几个大的打击者:
- 灵活使用您自己的数据存储区,可能还有多个数据存储区,以满足您特定应用程序的需求
- 自定义查询和转换
- 本机添加自定义逻辑,而不是通过连接到API中Webhook的微服务
- 滚动您自己的身份验证和许可机制
- 可能是成本更低的解决方案
dataloader
对于实时更新,您只需从firebase订阅实时事件并将其发送给webworker,以将其转换为可通过模式解析的真实graphql订阅
你可以在我的中篇文章中找到关于这个问题的更多信息:
希望有帮助 我强烈反对这里的一些建议。GraphQL可以以关系方式使用,但也可以以NoSQL方式使用。Firebase及其RTD(实时数据库)和F
const ref = path => firebase.database().ref(path)
const getValue = path => ref(path).once('value')
const mapSnapshotToEntities = snapshot => snapshot.val().map((value, id) => ({ id, ...value }))
const getEntities = path => getValue(path).then(mapSnapshotToEntities)
const resolvers = {
Author: {
posts(author) {
return getEntities('posts').then(posts => filter(posts, { authorId: author.id }))
},
},
Post: {
author(post) {
return getEntities('authors').then(posts => filter(authors, { id: authorId }))
},
},
};