Falcor和GraphQL之间有什么区别?

Falcor和GraphQL之间有什么区别?,graphql,relayjs,falcor,Graphql,Relayjs,Falcor,GraphQL由类型系统、查询语言和执行组成 语义、静态验证和类型内省,每一个都概述了 在下面为了指导您完成这些组件中的每一个,我们编写了 该示例旨在说明GraphQL的各个部分 - Falcor允许您将所有远程数据源表示为单个数据源 通过虚拟JSON图创建域模型。不管怎样,你都是用同样的方式编码的 数据所在的位置,无论是在客户端的内存中还是通过网络 在服务器上 - Falcor和GraphQL(在中继上下文中)之间的区别是什么?我已经查看了where答案与how比较。以下是总结(意译): F

GraphQL由类型系统、查询语言和执行组成 语义、静态验证和类型内省,每一个都概述了 在下面为了指导您完成这些组件中的每一个,我们编写了 该示例旨在说明GraphQL的各个部分

-

Falcor允许您将所有远程数据源表示为单个数据源 通过虚拟JSON图创建域模型。不管怎样,你都是用同样的方式编码的 数据所在的位置,无论是在客户端的内存中还是通过网络 在服务器上

-

Falcor和GraphQL(在中继上下文中)之间的区别是什么?

我已经查看了where答案与how比较。以下是总结(意译):

  • FalcorJS和GraphQL正在解决同样的问题(查询数据、管理数据)
  • 重要的区别在于GraphQL是一种查询语言,而FalcorJS不是
  • 当您向FalcorJS请求资源时,您非常明确地请求有限系列的值。FalcorJS确实支持范围之类的功能,例如
    类型[0..10]
    。但它不支持开放式查询,例如
    genres[0..*]
  • GraphQL是基于集合的:给出所有记录,其中为true,按此排序,等等。从这个意义上说,GraphQL查询语言比FalcorJS更强大
  • 使用GraphQL,您有一个强大的查询语言,但您必须在服务器上解释该查询语言
贾法尔认为,在大多数应用程序中,从客户机到服务器的查询类型具有相同的形状。因此,拥有特定且可预测的操作(如get和set)会带来更多利用缓存的机会。此外,许多开发人员都熟悉在REST体系结构中使用简单路由器映射请求


最后的讨论围绕着GraphQL带来的功能是否超过复杂性来解决。

我现在已经用这两个库编写了应用程序,我可以同意Gajus文章中的所有内容,但在我自己使用框架时发现了一些最重要的不同东西

  • 可能最大的实际区别是,到目前为止,GraphQL上的大多数示例和可能完成的工作都集中在将GraphQL与Relay集成上——Facebook的系统用于将ReactJS小部件与其数据需求集成在一起。另一方面,FalcorJS倾向于与小部件系统分开工作,这意味着它可能更容易集成到非反应/中继客户端,并且在将小部件数据依赖项与小部件匹配方面,它会自动为您做得更少
  • FalcorJS在客户端集成方面的灵活性的另一面是,它可能对服务器需要如何操作非常固执己见。FalcorJS实际上有一个直接的“通过HTTP调用此查询”功能——尽管Jafar Husain似乎没有太多谈论它——并且一旦您包含了这些功能,客户端库对服务器信息的反应方式就非常类似,除了GraphQL/Relay添加了一层配置之外。在FalcorJS中,如果您要为movie返回一个值,那么返回值最好是'movie',而在GraphQL中,您可以描述即使查询返回'film',您也应该将其作为'movie'放在客户端数据存储中这是Gajus提到的权力与复杂性权衡的一部分
  • 在实践的基础上,GraphQL和继电器似乎更加发达。贾法尔·侯赛因(Jafar Husain)提到,Netflix前端的下一个版本将至少部分在FalcorJS上运行,而Facebook团队提到,他们已经在生产中使用GraphQL/Relay堆栈的某些版本超过3年了
  • 围绕GraphQL和Relay的开源开发者社区似乎正在蓬勃发展。围绕GraphQL和Relay有大量参与度很高的支持项目,而我个人在FalcorJS方面发现的项目很少。此外,Relay()的基本github存储库比FalcorJS()的github存储库活跃得多。当我第一次撤销Facebook回购协议时,这些例子都被打破了。我打开了一个github问题,几个小时内就解决了。另一方面,我在FalcorJS上发布的github问题在两周内没有得到官方回应

更新:我在我的帖子下面找到了一条非常有用的评论,作为对主要内容的补充:

关于缺少示例的问题,您可以找到令人敬畏的falcorjs repo userful,Falcor的CRUD用法有不同的示例: ... 第二件事,有一本书叫做《猎鹰》(Falcor),其中也包括《猎鹰》(学习如何使用它的好方法):

原文如下:

与Relay/GraphQL相比,FalcorJS()更简单,效率更高

GraphQL+继电器的学习曲线很大:

在我的简短总结中:选择猎鹰。在您的下一个项目中使用Falcor,直到您的团队拥有大量预算和学习时间,然后使用RELAY+GRAPHQL

GraphQL+Relay有巨大的API,您必须高效地使用它。Falcor的API很小,任何熟悉JSON的前端开发人员都很容易掌握

如果你有一个资源有限的敏捷项目->那么就选择FalcorJS

我的主观看法是:FalcorJS在全栈javascript中更容易实现500%以上的效率

我还在我的项目上发布了一些FalcorJS初学者工具包(+更多完整的falcor示例项目):

更多技术细节:

1) 使用Falcor时,您可以在前端和后端同时使用:

从“falcor”进口falcor

然后根据这些数据构建您的模型

。。。您还需要两个易于在后端使用的库: a) falcor express—您只需使用一次(例如,app.use('/model.json',FalcorServer.dataSourceRoute(()=>new NamesRouter()))。资料来源:

b