GraphQL由类型系统,查询语言和执行组成 每个概述的语义,静态验证和类型内省 下面。为了指导您完成这些组件,我们已经编写了一篇文章 示例旨在说明GraphQL的各个部分。
- https://github.com/facebook/graphql
Falcor允许您将所有远程数据源表示为一个 域模型通过虚拟JSON图。无论如何,你都以相同的方式编码 数据的位置,无论是在客户端的内存中还是通过网络 在服务器上。
- http://netflix.github.io/falcor/
Falcor和GraphQL有什么区别(在Relay的背景下)?
答案 0 :(得分:123)
我查看了Angular Air Episode 26: FalcorJS and Angular 2,其中Jafar Husain回答了GraphQL与FalcorJS的比较。这是摘要(释义):
genres[0..10]
。但它不支持开放式查询,例如genres[0..*]
。Jafar认为,在大多数应用程序中,从客户端到服务器的查询类型共享相同的形状。因此,具有特定且可预测的操作(如get和set)会暴露更多利用缓存的机会。此外,许多开发人员都熟悉使用REST架构中的简单路由器映射请求。
最终讨论解决了GraphQL带来的功能是否超过了复杂性。
答案 1 :(得分:77)
我现在已经用两个库编写了应用程序,我可以同意Gajus帖子中的所有内容,但在我自己使用框架时发现了一些最重要的不同内容。
答案 2 :(得分:22)
Lee Byron GraphQL背后的工程师之一做了AMA on hashnode,当被问到这个问题时,这是他的回答:
- Falcor返回Observables,GraphQL只是值。对于Netflix如何使用Falcor,这对他们来说很有意义。他们在准备就绪时发出多个请求并显示数据,但这也意味着客户端开发人员必须直接使用Observables。 GraphQL是一个请求/响应模型,并返回JSON,这很容易使用。 Relay在Falcor提出的一些动态主义中加入了回归,同时只使用普通值。
- 键入系统。 GraphQL是根据类型系统定义的,这使我们能够构建许多有趣的工具,如GraphiQL,代码生成器,错误检测等.Falcor更具动态性,这本身就很有价值,但却限制了做这种事情的能力。
- 网络使用情况。 GraphQL最初设计用于在低端网络上的低端设备上运行Facebook的新闻源,因此它可以让您在单个网络中声明所需的一切请求以尽量减少延迟。另一方面,Falcor经常进行多次往返以收集额外数据。这实际上只是系统简单性和网络控制之间的权衡。对于Netflix,他们还处理非常低端的设备(例如Roku棒),但假设网络将足以流式传输视频。
编辑:Falcor确实batch requests,对网络使用情况的评论不准确。感谢@PrzeoR
答案 3 :(得分:20)
更新:我在帖子中发现了一个非常有用的评论,我希望与您分享,作为主要内容的补充内容:
关于缺少示例,你可以找到有用的awesome-falcorjs repo,有不同的Falcor使用CRUD的例子: https://github.com/przeor/awesome-falcorjs ......第二件事,有一本名为" Mastering Full Stack React Development"其中包括Falcor(学习如何使用它的好方法):
以下是ORGINAL POST:
与Relay / GraphQL相比,FalcorJS(https://www.facebook.com/groups/falcorjs/)的效率要简单得多。在我的简短摘要中:去找Falcor。在你的下一个项目中使用Falcor,直到你有一个庞大的预算和你团队的大量学习时间,然后使用RELAY + GRAPHQL。
GraphQL + Relay拥有巨大的API,您必须高效.Falcor拥有小型API,并且非常容易掌握任何熟悉JSON的前端开发人员。
如果你有一个资源有限的AGILE项目 - >然后去FalcorJS!
我的主观意见:FalcorJS在全栈javascript中更容易高效率500%。
我还在我的项目中发布了一些FalcorJS入门套件(+更多全栈式的示例项目):https://www.github.com/przeor
更多技术细节:
1)当您使用Falcor时,您可以在前端和后端使用它们:
从falcor&#39 ;;
导入falcor然后根据。
构建模型...您还需要两个易于在后端使用的库: a)falcor-express - 你使用它一次(例如 app.use(' /model.json' ;, FalcorServer.dataSourceRoute(()=> new NamesRouter())))。资料来源:https://github.com/przeor/falcor-netflix-shopping-cart-example/blob/master/server/index.js
b)falcor-router - 您可以在其中定义SIMPLE路线(例如 路线:' _view.length' )。资源: https://github.com/przeor/falcor-netflix-shopping-cart-example/blob/master/server/router.js
Falcor在学习曲线方面毫无意义。
您还可以看到比FB的lib更简单的文档,并查看文章" why you should care about falcorjs (netflix falcor)"。
2)Relay / GraphQL更像是一个巨大的企业工具。
例如,您有两个不同的文档分别讨论:
a)接力:https://facebook.github.io/relay/docs/tutorial.html - 容器 - 路线 - 根容器 - 准备状态 - 突变 - 网络层 - Babel Relay插件 - GRAPHQL
API REFERENCE
继电器
INTERFACES
RelayNetworkLayer
b)GrapQL:https://facebook.github.io/graphql/
这是您的选择:
简单的简短记录Falcor JS VERSUS巨大的企业级工具,包含GraphQL& Relay
的高级和高级文档正如我之前所说,如果你是一个掌握使用JSON概念的前端开发人员,那么Falcor团队的JSON图形实现是进行全栈开发项目的最佳方式。
答案 4 :(得分:5)
简而言之,Falcor或GraphQL或Restful解决了同样的问题 - 提供了一种有效查询/操作数据的工具。
它们的不同之处在于它们如何呈现数据:
每当我们需要为用户提供数据时,我们最终会得到以下内容:客户端 - >查询 - > {a layer translate query into data ops} - >数据
在使用GraphQL,Falcor和JSON API(甚至是ODdata)之后,我编写了自己的data query layer。它更简单,更容易学习,与GraphQL更相同。
在以下处查看:
https://github.com/giapnguyen74/nextql
它还与featherjs集成,用于实时查询/变异。 https://github.com/giapnguyen74/nextql-feathers
答案 5 :(得分:1)
好的,只是从一个简单但重要的区别开始, GraphQL 是基于查询而 Falcor 不是!
但是他们如何帮助你?
基本上,他们都帮助我们管理和查询数据,但 GraphQL 有 req / res模型并将数据返回为 JSON ,基本上 GraphQL 中的想法只有一个请求将所有数据放在一个目标中...而且,通过提出确切的请求得到确切的响应,所以可以在低速互联网上运行移动设备,如3G网络......因此,如果您有许多移动用户或出于某些原因,您希望获得更少的请求和更快的响应,请使用 GraphQL ...而 Faclor 与此并不太远,请继续阅读......
另一方面,Netflix的 Falcor 通常会有额外的请求(通常不止一次)来检索你的所有数据,尽管他们试图将它改进为单个请求... Falcor 对查询的限制更多,并且没有预定义的查询帮助程序,如范围等...
但是为了进一步澄清,让我们看看每个人如何自我介绍:
GraphQL,API的查询语言
GraphQL是API的查询语言和实现的运行时 这些查询包含您现有的数据。 GraphQL提供了完整的和 可理解的API数据描述,为客户提供 能够确切地询问他们需要什么,仅此而已 随着时间的推移更容易发展API,并启用强大的开发人员工具。
向您的API发送GraphQL查询并获得您需要的内容, 没有更多,也没有更少。 GraphQL查询总是返回 可预测的结果。使用GraphQL的应用程序快速而稳定,因为 他们控制所获得的数据,而不是服务器。
GraphQL查询不仅可以访问一个资源的属性,还可以访问 也顺利地遵循他们之间的参考。典型的REST API 需要从多个URL加载,GraphQL API可以获取您的所有数据 应用程序需要一个请求。使用GraphQL的应用程序可以快速开启 慢速移动网络连接。
GraphQL API按类型和字段组织,而不是 端点。从单一访问数据的全部功能 端点。 GraphQL使用类型来确保应用程序只询问什么 可能并提供明确且有用的错误。应用可以使用类型 避免编写手动解析代码。
Falcor,一个用于高效数据获取的JavaScript库
Falcor允许您将所有远程数据源表示为一个 域模型通过虚拟JSON图。无论如何,你都以相同的方式编码 数据的位置,无论是在客户端的内存中还是通过网络 在服务器上。
类似JavaScript的路径语法可以轻松访问 如果你想要它,你想要的数据很少。您检索数据 使用熟悉的JavaScript操作,如get,set和call。如果你 了解您的数据,了解您的API。
Falcor会自动遍历图表中的参考文献并制作 请求。 Falcor透明地处理所有网络 通信,机会性批处理和重复数据删除请求。