写点什么

谈谈 GraphQL 的历史、组件和生态系统

  • 2019-08-30
  • 本文字数:3374 字

    阅读完需:约 11 分钟

谈谈 GraphQL 的历史、组件和生态系统

多年来,RESTful web 服务一直在为简单查询结构提供基本支持。但是,这些服务没有提供对数据的细粒度控制,从而允许开发人员可以灵活运用而无需创建大量不必要的调用。


GraphQL最初由 Facebook 构建,它是用于 API 的查询语言,允许开发人员选择他们想要发出的请求类型,并在单个请求中接收所需的信息。


我在本文中将解释GraphQL是什么、它是怎样开始的以及它如何成为开发人员构建 API 的基本工具。我们还将介绍 GraphQL 的关键组件以及 GraphQL 生态系统中的主要参与者。


让我们开始吧!

GraphQL 是什么?

按其最简单的形式来看,GraphQL 是一种开源语言,用于从客户端应用程序查询数据库。


GraphQL的联合创建者Dan Schafer 认为:


“GraphQL 是一种查询语言,用于我们在客户端和服务器之间转移合约的 API,允许服务器说‘这些是我公开的能力’,并允许客户端以一种方式来描述它们的要求,而这种方式最终使产品开发人员能够构建其希望创建的产品。”


在后台,它告诉 API 如何把检索到的数据呈现给客户端。这使开发人员能够发出精确的数据请求,以便他们接收的就是他们需要的东西——不多也不少。


以下是 GraphQL 为开发人员提供的主要好处:


  • 准确地声明他们需要服务器所提供的内容,并以可预测的方法来接收请求的数据。

  • 在单个请求中从服务器检索多个资源。

  • 它是强类型的,也即:其允许 API 用户知道(1)有哪些数据可用,以及(2)数据以什么形式存在。


一个 GraphQL 查询本质上是一个字符串,发送该字符串到服务器后,返回 JSON 文件到客户端。这些查询快速应答了它们的响应,因此容易预测运行查询返回的数据的形状。另外,如果开发人员知道其应用程序所需数据的类型,那么,编写查询也就容易了。


与 RESTful 服务或 SQL 中复杂的连接语句不同,GraphQL 是分层的。这意味着,其遵循对象之间的关系,适用于分层用户界面使用的图形结构数据。


GraphQL 利用现有代码,而不是命令或提供数据存储。它意味着可以查询 GraphQL 服务器支持的类型,使得在这些信息之上构建工具变得容易。


借助 GraphQL,返回数据的形状完全取决于客户端的查询。因此,可以容易地给服务器添加其他字段(比如,在添加新产品功能的时候),而不会影响现有的客户端。反之亦然。因此,当我们不再使用旧功能时,相关的服务器字段将继续工作,即使它们被弃用了。这样,GraphQL 带来了向后兼容过程,不再需要增加版本号,这个功能很酷。


现在,我们对GraphQL是什么有了更好的理解,我们赶快来看看这一切是怎样开始的吧。


构建一个带数据库的即时GraphQL API,并开始探索一下这项技术的工作原理。

这一切是怎样开始的

GraphQL 是怎样开始的?在 GraphQL 出现之前,开发人员在使用什么?它给他们带来了哪些限制?让我们来找出答案!

GraphQL 是怎样开始的?

向移动的转变

GraphQL 的起源可追溯到这个行业向移动的转变。当时,Facebook 的移动战略(即,在移动设备上采用 HTML5)由于网络的使用量过高而未能实现。结果,Facebook 决定使用原生技术从头构建 iOS 应用程序。


在移动端实现 Facebook 新闻推送的是一个主要问题。这不是像获检索一个故事、作者、故事的内容、评论列表和喜欢该文章的人这么简单。每个故事都相互关联、嵌套和递归的。现有的 API 没有被设计成允许开发人员在移动设备上展示一个丰富、类似新闻推送的体验。它们没有层次性,允许开发人员选择他们所需要的,或有显示异构推送故事列表的能力。


在 2012 年,Facebook 决定,他们需要构建一个新的新闻推送 API,以构建 Facebook 的移动应用程序。这就是 GraphQL 开始成形的时间,并且,在 8 月中旬,Facebook 发布了采用新 GraphQL 技术的 iOS5.0 应用程序。它允许开发人员通过利用其数据获取(data-fetching)功能来减少网络的使用。在接下来的一年半时间里,除了新闻推送外,GraphQL API 扩展到大多数的 FacebookiOS 应用程序。在 2015 年,GraphQL 规范首次与 JavaScript 中的引用实现一起发布。

传统 REST API 的局限性

传统 REST API 的主要问题是速度慢以及需要硬编码(hard-coding)。加快速度的一种可能解决方案是创建多个端点。但是,当我们把这个外推以覆盖所有数据来源和 API 客户端应用程序所需,我们就遇到了 REST API 的局限性问题。


让我用个类比来解释一下传统 REST API 的局限性。


比方说,我们有台自动售货机。在传统的 REST 里,我们在自动售货机上按一个按钮就会得到一样东西。因此,我们必须一次按多个按钮才能得到我们需要的所有东西,这个过程很慢。


但是,如果我们有个特殊用途的按钮,按它一次就可以得到多样东西。因此,比如,我们能够按一次一个特殊用途的按钮,就从自动售货机那里得到 4 样东西。


把这两种方法混合一下以获得这么一台自动售货机,我们可以以组合方式按下我们需要的按钮就可以一次性得到我们想要的一切。这就是 GraphQL 在做的。


GraphQL 旨在通过拥有一个“智能”节点而不是很多“愚蠢的”节点来解决这些问题。关键的好处在于,智能节点能够执行复杂的查询,并按客户端的要求形成输出的数据。


本质上,GraphQL 层存在于客户端和数据源之间。其任务是接收客户端请求,并根据客户端的要求获取必要的数据。简而言之,GraphQL 查询方法解决了广泛的大规模应用程序开发问题。

GraphQL 是如何流行开来的

正如我们可以想象的,业界已经存在对像 GraphQL 这样的解决方案的需求,这就是它这么快就流行起来的原因。在头 6 个月中,在不同编程语言中就都实现了 GraphQL,这些编程语言包括 PHP、JavaScript、Scala、Python 和 Ruby。


当新公司和爱好者开始构建它时,它就流行开来。最终,在 2016 年, 更大的公司开始采用该技术,从 GitHub 开始,然后是推特、Yelp、《纽约时报》、Airbnb 等公司。

GraphQL 的主要组件

实际上,GraphQL API 使用了 3 个主要的组件:


  • 查询查询是客户端发出的请求,查询字段可以指向数组及支持参数。

  • 解析器。除非我们告诉 GraphQL 服务器该做什么,不然它不知道如何处理它得到的查询。 这个工作是用解析器来完成的。简单地说,解析器告诉 GraphQL 如何(及从何处)获取与特定字段对应的数据。借助 GraphQL,我们使用的 API 模式和数据库模式是解耦的。这允许我们使用它们作为变更解析器来修改我们数据库的内容。

  • 模式。GraphQL 模式描述了客户端一旦连接到 GraphQL 服务器就可以使用的功能。模式中的核心构建块被称为类型。

GraphQL 生态系统

现在,我们来快速浏览一下 GraphQL 生态系统中的主要参与者。

GraphQL 服务器

由于 GraphQL 只是个规范,因此,我们需要一些 GraphQL 服务器实现才能开始。


  • GraphQL-JS是 GraphQL 原始参考实现,可以与Express一起使用。

  • GraphQL-Server是 Apollo 的一体式 GraphQL 服务器实现,正在迅速获得关注。它可以从任何 GraphQL 客户端查询。

  • GraphQL-Severless是 Back4App 即时 GraphQL API,完全集成了数据库(MongoDB)及云函数(Cloud Functions)。我们可以作为提供 GraphQL API 的服务访问后端。

  • GraphQL Yoga是构建于 Express 和 Apollo 服务器上的 Prisma 的服务器实现。

GraphQL 客户端

尽管我们可以直接查询我们的 GraphQL API,但是,拥有一个专用的客户端库肯定会让事情变得更容易。


  • Relay是 Facebook 的 JavaScript 库,用以使用 GraphQL 构建 React 应用程序。

  • Apollo Client缓存请求并正则化数据,从而节省网络流量。它还支持分页、预取数据以及数据层和视图层之间的连接。

GraphQL 网关

最流行的 GraphQL 网关可能是Apollo Engine。其功能包括:查询执行跟踪、查询缓存、错误跟踪和 API 性能趋势分析。

开源应用程序和工具

以下是一些使用了 GraphQL 的开源应用程序:


  • 由 GraphQL 提供支持,Gatsby能够从多个 GraphQL API 获取数据,并用来创建静态的供客户端使用的 React 应用程序。

  • VulcanJS利用 GraphQL,以允许用户快速地构建 CRUD 应用程序。

  • GraphQL Playground是个功能强大的 IDE,可以为 GraphQL 查询、变更、订阅、验证等打包编辑器。它允许开发人员可视化模式的结构。

  • GraphiQL是个内嵌于浏览器的 IDE,可以和 GraphQL API 进行交互,支持数据查询、执行变更及自动完成查询。

结论

尽管 GraphQL 的构建是用来解决 Facebook 针对 iOS 应用程序新闻推送 API 的一个非常具体的问题,但是,它很快扩展到 Facebook 内部,解决了更多的问题,并且,最终进行了开源,目前有很多大的公司采用的工具。


原文链接:


What is GraphQL: History, Components, and Ecosystem


2019-08-30 09:594306
用户头像

发布了 199 篇内容, 共 87.2 次阅读, 收获喜欢 295 次。

关注

评论

发布
暂无评论
发现更多内容

GitHub高赞!Python零基础也能搞定的数据分析与处理

我再BUG界嘎嘎乱杀

Python 数据分析 Excel 数据处理 开发语言

豆瓣评分9.5!清华大牛熬夜整理的Python深度学习教程开发下载!

我再BUG界嘎嘎乱杀

Python 人工智能 深度学习

百度的面试!你觉得这个难度怎么样?

王中阳Go

面试 面经‘ Go 面试题 面经 后端 大厂

数字身份管理发展趋势:身份系统基础设施化

芯盾时代

数字身份 iam 统一身份认证

鸿蒙,我们土地上开出的花

脑极体

AI

搜索型数据库的技术发展历程与趋势前瞻

极限实验室

趋势 搜索型数据库

什么是客户体验自动化?

快乐非自愿限量之名

运维 自动化 低代码 客户体验

这2个AI格式转换工具,轻松将PDF文件转为PPT!

彭宏豪95

人工智能 效率工具 格式转换 AIGC AI生成PPT

淘宝商品详情数据(实时更新,缓存数据)

tbapi

淘宝商品详情数据接口 淘宝API 淘宝商品数据采集

和小红书一起参会! 了解大模型与大数据融合的技术趋势

小红书技术REDtech

数据 会议 大模型

VMware mac虚拟机安装Win10系统的详细教程

理理

Subex在《2024年Gartner®CSP客户和业务运营人工智能魔力象限™报告》中获得认可

财见

谈小娱自助台球受邀参加萤石云开发者大会

Geek_2d6073

从零开始带你上手体验Sermant自定义插件开发

华为云开发者联盟

微服务 云原生 华为云 华为云开发者联盟 企业号2024年7月PK榜

实时数仓Hologres OLAP场景核心能力介绍

阿里云大数据AI技术

大数据 阿里云 实时数仓 OLAP hologres

《中国数据库系列纪录片》轻舟已过万重山

不惑

数据库 历史 国产数据库

Mac虚拟机装Windows Mac环境安装Win虚拟机 mac安装windows虚拟机教程免费 mac虚拟机parallels desktop

阿拉灯神丁

#Mac 虚拟机软件 pd 19 虚拟机安装

VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS HPE (慧与) 定制版

sysin

macos esxi OEM BIOS hpe

荣誉加身!陶建辉被授予 GDOS 全球数据库及开源峰会荣誉顾问

TDengine

数据库 tdengine 时序数据库

京东JD商品sku信息API返回值探索:商品规格数据与跨境电商机遇

技术冰糖葫芦

API Explorer API 编排 API 安全 API 文档

观测云赋能「阿里云飞天企业版」,打造全方位监控观测解决方案

观测云

监控

idm不能续传是什么意思 idm无法继续下载文件 IDM的断点续传功能 IDM是什么软件

阿拉灯神丁

断点续传 网络加速 下载器 IDM idm下载

idm支持断点续传吗 idm断点续传如何使用

阿拉灯神丁

网络加速 下载器 大文件断点续传 idm下载 网页视频下载工具

专为 macOS 设计的系统监控工具 iStat Menus for mac中文版

理理

谈谈 GraphQL 的历史、组件和生态系统_语言 & 开发_Brenda Clark_InfoQ精选文章