编辑推荐

为什么GraphQL是Ajax诞生以来创新性的数据获取技术?GraphQL通过为API提供查询语言和用以完成查询的运行状态,提供了对REST和特定页面服务架构的替代方案。借助这《GraphQL学习指南》,AlexBanks和EvePorcello为希望开始使用GraphQL的前端Web开发人员、后端工程师以及项目或产品经理提供了一条清晰的学习路径。

你将先后探索图论、图数据结构和GraphQL类型,之后在实际项目中学习如何为照片共享应用构建schema。《GraphQL学习指南》还将向你介绍ApolloClient,可用来将GraphQL连接到你的用户界面。

·探索图论并回顾当今使用的家喻户晓的图形实例

·了解GraphQL如何将数据库查询方法应用于互联网

·为照片分享应用创建一个schema,让它成为前后端团队间的桥梁和契约

·使用JavaScript构建功能完备的GraphQL服务,使用Apollo实现客户端

·了解如何为生产环境准备GraphQLAPI和客户端

内容简介

  为什么GraphQL是Ajax诞生以来具创新性的数据获取技术?GraphQL通过为API提供查询语言和用以完成查询的运行状态,提供了对REST和特定页面服务架构的替代方案。借助这《GraphQL学习指南》,AlexBanks和EvePorcello为希望开始使用GraphQL的前端Web开发人员、后端工程师以及项目或产品经理提供了一条清晰的学习路径。你将先后探索图论、图数据结构和GraphQL类型,之后在实际项目中学习如何为照片共享应用构建schema。
  《GraphQL学习指南》还将向你介绍ApolloClient,可用来将GraphQL连接到你的用户界面。

作者简介

AlexBanks和EvePorcello都是软件工程师,LinkedInLearning作者、讲师以及MoonHighway的创始人。MoonHighway是一家位于北加州的培训和课程开发公司。

精彩书评

  ★“这《GraphQL学习指南》是学习GraphQL和Apollo方面全面的教材,Eve和Alex是业内具吸引力的教师。无论你是准备开始学习GraphQL,或是想了解一下新的实践,这《GraphQL学习指南》都值得一读。”
  ——PeggyRayzisApollo工程经理

目录

前言1

第1章欢迎来到GraphQL的世界5

GraphQL是什么6

GraphQL规范8

GraphQL的设计原则8

GraphQL的起源9

数据传输的历史10

远程过程调用10

简单对象访问协议10

表述性状态传递(REST)10

REST的缺点11

过量获取11

获取不足13

管理REST接口15

现实世界中的GraphQL15

GraphQL客户端库15

第2章图论17

图论相关词汇19

图论的历史22

树就是图25

现实世界中的图形结构28

第3章GraphQL查询语言31

GraphQLAPI工具33

GraphiQL33

GraphQLPlayground35

公共GraphQLAPI37

GraphQL查询字段37

边和连接40

片段41

变更47

使用查询变量48

订阅49

自检50

抽象语法树51

第4章设计schema53

定义类型53

类型54

标量类型55

枚举55

连接和列表56

一对一连接57

一对多连接58

多对多连接59

不同类型的列表61

参数63

筛选数据64

变更67

输入类型68

返回类型71

订阅类型72

schema文档73

第5章创建一个GraphQLAPI77

项目设置77

解析器78

根解析器80

类型解析器81

使用输入和枚举类型84

边和连接86

自定义标量90

apollo-server-express94

上下文97

安装MongoDB97

将数据库添加到上下文98

GitHub授权100

设置GitHub授权100

授权流程101

githubAuth变更操作103

验证用户106

总结112

第6章GraphQL客户端113

使用GraphQLAPI113

fetch请求113

graphql-request115

ApolloClient117

在React中应用ApolloClient118

启动项目118

配置ApolloClient119

Query组件121

Mutation组件124

授权126

为用户授权127

用户识别130

添加缓存132

取回策略132

持久缓存133

更新缓存134

第7章现实世界中的GraphQL139

订阅139

使用订阅140

在项目中配置订阅144

上传文件148

在服务器端处理文件上传149

通过ApolloClient上传一张新照片151

安全157

设置请求超时时间157

数据限制158

限制查询深度158

限制查询复杂度160

ApolloEngine162

让我们更进一步163

增量迁移163

schema优先开发164

GraphQL的业内活动166

社区167

加入社区聊天群组167

前言/序言

译者序

时光如水,开发如梭。技术的发展让曾经高度耦合的前后端实现了分离,RESTfulAPI的诞生让含糊不清的接口有了清晰的表述,H5的发展使移动开发如雨后春笋般发展起来。jQuery替代了繁杂的原生JavaScript操作,而AngularJS、React、Vue又开启了一个新的时代,前端路由API也带来了单页面应用(SPA)的全面普及。再接下来,NodeJS又让前端终于有能力把眼光从那单薄的浏览器转向更深的后端和网络,Express和Koa等服务端框架也就应运而生。

思想如花,谢去了往日的美艳,才会迎来明日的绚烂。

前端方面,组件化开发慢慢成为潮流,组件的状态也由其自身来管理。组件化带来了便利,也带来了些许烦恼。通常来说,在嵌套的组件树中,有的组件需要把异步请求(Ajax)的数据和状态发送给子组件或是通知给父组件,这就不可避免地产生了结构复杂度、数据来源的不清晰,代码的可读性变差进而导致维护起来不方便,项目迭代也就成了另一个令人挠头的问题。

后端方面,虽然从简单对象访问协议(SOAP)过渡到了表述性状态传递(REST),但是API的接口数量变多且维护的成本也变高了。一般来说接口的数量通常由业务场景来决定,为了尽量减少接口数量以优化请求,后端工程师们需要构建低粒度的数据接口,再根据业务场景进行组合,对外暴露业务接口。此外,接口的扩展成本也提升了。移动端不需要太多的字段,PC端则需要展示更多的数据,需求可谓南辕北辙。再者,单页面出于SEO的原因也需要对首屏进行性能优化,不仅需要进行服务端渲染(SSR),还要对接口进行合并。

在以上前提下,Facebook于2015年开源了GraphQL,期望能够成为取代REST的新一代的查询语言。同REST相比,GraphQL有以下几个优点:

提高开发速度。GraphQL可以减少发出的请求数,以单个调用来获取所需数据比使用多个请求要容易得多,不仅减少了延迟,还能够降低服务器的压力,加快前端的渲染速度。此外,GraphQL具有自文档的特点,所以可以省去查找文档了解如何使用API的时间。

提升开发者体验。GraphQL让端开发者花更少的时间思考如何获取数据。在使用Apollo时,只需要在UI中声明数据。数据和UI放在一起,阅读代码和编写代码都变得更方便了。GraphQL之于数据,就如React之于UI。

将复杂的API进行简化和标准化。GraphQL使工程师可以按照需求自由组合和嵌套对象。对于每个对象都能够获得所需的数据,不多也不少。

提升安全性。GraphQL需要进行schema验证,而且是强类型的,因为这是它规范的一部分。同时静态验证也提升了工程师在重构时的信心。此外,GraphQL为客户端提供了控制,它可以频繁更新,而不会因为引入了新类型造成重大变更。另外,因为引入了schema,所以GraphQL是一种无版本的API。

GraphQL是一种协议和一种查询语言。GraphQLAPI可以直接访问数据存储,但在大多数情况下,GraphQLAPI是一个数据聚合器和一个抽象层,一个可以提升开发速度、减少维护工作并让开发人员更快乐的层。

GraphQL学习指南》从GraphQL的历史和规范讲起,结合React和Apollo帮助读者从实际项目中了解GraphQL在服务端和客户端两方面的构建方式。《GraphQL学习指南》也算是为GraphQL的布道尽一份力,推广一下下一代API的构建形式。

智慧如叶,飘落了今昔的优雅,迎来明日的翩跹。

技术随着时代发展而进步和变革的脚步从未停止。今天奉为圭臬的准则说不定就是明天的谬论。不断吐故纳新,才能让自己站在技术的前沿,跟上时代的潮流。我们站在前人的肩膀上,但又不能止于巨人的肩膀。不断追求看得更远才能继续攀登,智慧才能一代一代发展流传,生生不息。

感谢新浪移动大前端给我这次机会能够让我从事《GraphQL学习指南》的翻译工作,能够为GraphQL的发展搭一阶台阶,倍感荣幸。也希望《GraphQL学习指南》能帮到各位同行,让大家一起进步。

新浪移动大前端 郭笑鹏(大笑)

2019年5月于北京

前言

致谢

如果没有许多杰出人物的帮助,就没有这《GraphQL学习指南》的诞生。最早是我们的《LearningReact》一书的编辑AllyMacDonald鼓励我们写作《GraphQL学习指南》的。之后我们非常幸运地与AliciaYoung合作,正是她主导了这《GraphQL学习指南》的出版。感谢JustinBilling、MelanieYarbrough和ChrisEdwards,他们的辛勤审校排除书中的错误。

在整个过程中,我们很幸运地从Apollo团队的PeggyRayzis和SashkoStubailo那里得到了反馈,他们分享了关于最新特性的见解和建议。还要感谢AdamRackis、GarrettMcCullough和ShiviSingh,他们都是优秀的技术编辑。

写这本关于GraphQL的书是因为我们热爱GraphQL。我们认为你也会热爱它的。

GraphQL学习指南》排版约定

GraphQL学习指南》使用以下排版约定:

斜体(Italic)

指示新术语、URL、电子邮件地址、文件名和文件扩展名。

等宽字体(Constantwidth)

表示代码段以及段落中的程序元素,比如变量、函数名、数据库、数据类型、环境变量、语句以及关键字。

等宽粗体(Constantwidthbold)

显示应由用户按字面输入的命令或其他文本。

等宽斜体(Constantwidthitalic)

表示将由用户提供的值(或由上下文确定的值)替换的文本。

这个图标表示提示或建议。

这个图标表示重要说明。

这个图标表示警告或提醒。

使用代码示例

GraphQL学习指南》的随附资料(代码示例、练习题等)可以从网址https://github.com/moonhighway/learning-graphql/下载。

让《GraphQL学习指南》助你一臂之力。也许你需要在自己的程序或文档中用到《GraphQL学习指南》中的代码。除非大段使用,否则不必与我们联系取得授权。例如,无须请求许可,就可以用《GraphQL学习指南》中的几段代码写成一个程序。但是销售或发布O扲eilly图书中的代码则必须事先获得授权。引用书中的代码来回答问题也无须获得授权。将大段的示例代码整合到你自己的产品文档中则必须经过许可。

使用我们的代码时,希望你能标明它的出处,但不强求。出处信息一般包括书名、作者、出版商和书号。例如:LearningGraphQL(O扲eilly,2018),EvePorcello和AlexBanks著。书号为978-1-492-03071-3。

如果还有关于使用代码的未尽事宜,可以随时与我们联系:permissions@oreilly.com。

Safari在线电子书

Safari(前身为SafariBooksOnline)是一个面向企业、政府、教育工作者和个人的会员制培训和参考平台。

会员可以访问来自超过250家出版商的书籍、培训视频、学习路径、互动教程和精心策划的播放列表,包括O扲eillyMedia、HarvardBusinessReview、PrenticeHallProfessional、Addison-WesleyProfessional、MicrosoftPress、Sams、Que、PeachpitPress、Adobe、FocalPress、CiscoPress、JohnWiley&Sons、Syngress、MorganKaufmann、IBMRedbooks、Packt、AdobePress、FTPress、Apress、Manning、NewRiders、McGraw-Hill、Jones&Bartlett和CourseTechnology等。

更多信息,请访问http://oreilly.com/safari。

如何联系我们

对于《GraphQL学习指南》如果有任何意见或疑问,请按照以下地址联系《GraphQL学习指南》出版商。

美国:

O'ReillyMedia,Inc.

1005GravensteinHighwayNorth

Sebastopol,CA95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

在《GraphQL学习指南》的专属网页,你可以找到《GraphQL学习指南》的相关信息,包括勘误表、示例代码以及其他信息。网页地址为:

http://bit.ly/learning-graphql-orm

对《GraphQL学习指南》的评论和技术性问题,请发送电子邮件到:

bookquestions@oreilly.com

要了解更多O'Reilly图书、培训课程、会议和新闻的信息,请访问:

http://www.oreilly.com

我们在Facebook的地址为:http://facebook.com/oreilly。

请关注我们的Twitter动态:http://twitter.com/oreillymedia。

我们的YouTube视频地址:http://www.youtube.com/oreillymedia。


其他推荐