【问题标题】:GraphQL, Apollo, Relay … how do they fit together?GraphQL、Apollo、Relay……它们是如何结合在一起的?
【发布时间】:2020-02-08 14:05:05
【问题描述】:

在尝试开始使用 GraphQL 时,您会遇到很多新术语:有些与 GraphQL 本身的概念有关(突变、订阅等),但也有一个完整的生态系统围绕着它——不幸的是——并不总是与 GraphQL 本身清楚地分开。但是,我发现很难说一件事在哪里结束,另一件事从哪里开始,有什么区别,什么时候需要什么。

所以,举几个这些术语:

  • GraphQL
  • 阿波罗
  • 阿波罗客户端
  • 继电器

你能用几句话解释一下这些东西(GraphQL 除外)是什么,它们有什么用处,以及它们如何相互关联(或不相互关联)?而且,这里缺少哪些重要工具/概念?

【问题讨论】:

    标签: graphql


    【解决方案1】:

    GraphQL 语言

    GraphQL 是一种查询语言。它有一个specification,它定义了语言、模式以及 GraphQL 查询的执行。学习这些东西是一个很好的起点,并且完全与编程语言无关。

    GraphQL 实现

    然后有不同语言的不同 GraphQL 实现,允许您创建模式并描述查询如何解析为值。通常,这些实现会根据您定义的模式验证查询并接管执行。几乎所有 JavaScript 生态系统都使用 GraphQL.js,但也有 many more implementations in other languages

    GraphQL 服务器

    GraphQL 也与传输层无关。这意味着通常 GraphQL 实现不附带 HTTP 服务器。但是我们经常使用 HTTP 来进行 GraphQL 查询,这就是为什么有一些库使用这些实现并提供一种在顶部创建 HTTP 服务器的简单方法(例如,通过为 HTTP 框架提供中间件或与整个服务器一起提供) .我认为在 JavaScript 中几乎每个人都使用Apollo Server,因为它带来了更多功能,并且与 Apollo 生态系统和 Apollo 公司提供的服务无缝集成。

    Apollo Server 也非常普及了定义 GraphQL API 的 SDL(模式定义语言)方法。使用 SDL 方法,GraphQL 模式不是使用代码创建的,而是通过以特殊语言(也是 GraphQL 规范的一部分)定义模式并与该定义分开定义单个解析器函数来创建的。这让你快速入门,但我的感觉是它对于大型 API 来说不是很流行。但是您可以简单地将 GraphQL.js 架构传递给 Apollo Server。

    GraphQL 客户端

    当我们有一个正在运行的服务器时,我们可以使用一个简单的 HTTP 客户端(例如浏览器的 fetch 功能)向服务器进行查询。这工作得很好,但是当我们使用支持缓存自动查询获取的客户端时,GraphQL 的强大功能真正发挥了作用。这样我们就可以到达声明式数据获取/数据依赖的乐土。 Facebook 发布了自己的客户端库,专为满足大型网络企业的独特需求而设计。该库称为Relay,较新的版本(与旧版本不同)通常称为Relay Modern。但是 Relay 相对复杂,需要一个特定的构建链,因此当 Apollo 发布了一个轻量级的客户端替代方案 Apollo Client 时,GraphQL 变得非常有趣。 Apollo Client 多年来开发了很多,现在支持很多配置。 apollo-react 还允许将 Apollo Client 与 React 一起使用,而 Relay 是专门为 React 构建的。多年来,随着 Apollo 的重量增加,强大实验室的人们创建了Urql

    结论

    您可以同时使用所有这些技术。许多人干脆选择一起使用阿波罗生态系统,这可能是一个可靠的选择。如果您在使用 Apollo Client 或 Urql 之前使用过 Redux,您可能会感到宾至如归。如果您正在构建一个以性能为重点的大型应用程序,您应该考虑使用 Relay 并了解它对您构建 GraphQL 模式的方式造成的限制。

    【讨论】:

      猜你喜欢
      • 2015-03-16
      • 2016-09-24
      • 2016-09-19
      • 2017-04-19
      • 2011-01-12
      • 2015-11-20
      • 2016-02-10
      • 2017-03-17
      • 1970-01-01
      相关资源
      最近更新 更多