首页>参考读物>计算机科学与技术>软件与程序设计

GraphQL学习指南
作者 : [美]伊芙·波塞洛(Eve Porcello)亚历克斯·班克斯(Alex Banks)著
译者 : 郭笑鹏 译
出版日期 : 2019-06-14
ISBN : 978-7-111-62861-3
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 179
开本 : 16
原书名 : Learning GraphQL: Declarative Data Fetching for Modern Web Apps
原出版社: OReilly Media, Inc.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书为希望开始使用GraphQL的前端Web开发人员、后端工程师以及项目或产品经理提供了一条清晰的学习路径。书中将先后探索图论、图数据结构和GraphQL类型,之后在实际项目中学习如何为照片共享应用构建schema。本书还介绍了Apollo Client,可用来将GraphQL连接到用户界面。

图书特色

图书前言

致谢
如果没有许多杰出人物的帮助,就没有这本书的诞生。最早是我们的《Learning React》一书的编辑Ally MacDonald鼓励我们写作本书的。之后我们非常幸运地与Alicia Young合作,正是她主导了这本书的出版。感谢Justin Billing、Melanie Yarbrough和Chris Edwards,他们的辛勤审校排除书中的错误。
在整个过程中,我们很幸运地从Apollo团队的Peggy Rayzis和Sashko Stubailo那里得到了反馈,他们分享了关于最新特性的见解和建议。还要感谢Adam Rackis、Garrett McCullough和Shivi Singh,他们都是优秀的技术编辑。
写这本关于GraphQL的书是因为我们热爱GraphQL。我们认为你也会热爱它的。
本书排版约定
本书使用以下排版约定:
斜体(Italic)
指示新术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
表示代码段以及段落中的程序元素,比如变量、函数名、数据库、数据类型、环境变量、语句以及关键字。
等宽粗体(Constant width bold)
显示应由用户按字面输入的命令或其他文本。
等宽斜体(Constant width italic)
表示将由用户提供的值(或由上下文确定的值)替换的文本。
这个图标表示提示或建议。
这个图标表示重要说明。
这个图标表示警告或提醒。
使用代码示例
本书的随附资料(代码示例、练习题等)可以从网址https://github.com/moonhighway/learning-graphql/下载。
让本书助你一臂之力。也许你需要在自己的程序或文档中用到本书中的代码。除非大段使用,否则不必与我们联系取得授权。例如,无须请求许可,就可以用本书中的几段代码写成一个程序。但是销售或发布O扲eilly图书中的代码则必须事先获得授权。引用书中的代码来回答问题也无须获得授权。将大段的示例代码整合到你自己的产品文档中则必须经过许可。
使用我们的代码时,希望你能标明它的出处,但不强求。出处信息一般包括书名、作者、出版商和书号。例如:Learning GraphQL(O扲eilly, 2018),Eve Porcello和Alex Banks著。书号为978-1-492-03071-3。
如果还有关于使用代码的未尽事宜,可以随时与我们联系:permissions@oreilly.com。
Safari在线电子书
Safari(前身为Safari Books Online)是一个面向企业、政府、教育工作者和个人的会员制培训和参考平台。
会员可以访问来自超过250家出版商的书籍、培训视频、学习路径、互动教程和精心策划的播放列表,包括O扲eilly Media、Harvard Business Review、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley&Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones&Bartlett和Course Technology等。
更多信息,请访问http://oreilly.com/safari。
如何联系我们
对于本书如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O'Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
在本书的专属网页,你可以找到本书的相关信息,包括勘误表、示例代码以及其他信息。网页地址为:
http://bit.ly/learning-graphql-orm
对本书的评论和技术性问题,请发送电子邮件到:
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。

上架指导

计算机\Web开发

封底文字

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

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

 探索图论并回顾当今使用的家喻户晓的图形实例
 了解GraphQL如何将数据库查询方法应用于互联网
 为照片分享应用创建一个schema,让它成为前后端团队间的桥梁和契约
 使用JavaScript构建功能完备的GraphQL服务,使用Apollo实现客户端
 了解如何为生产环境准备GraphQL API和客户端


“这本书是学习GraphQL和Apollo方面最全面的教材,Eve和Alex是业内最具吸引力的教师。无论你是准备开始学习GraphQL,亦或是想了解一下最新的最佳实践,这本书值得在你的桌子上占一个位置。”

--Peggy Rayzis,Apollo工程经理

本书的两位作者Alex Banks和Eve Porcello都是软件工程师,LinkedIn Learning作者、讲师以及Moon Highway的创始人。Moon Highway是一家位于北加州的培训和课程开发公司。

作者简介

[美]伊芙·波塞洛(Eve Porcello)亚历克斯·班克斯(Alex Banks)著:Alex Banks和Eve Porcello都是软件工程师,LinkedIn Learning作者、讲师以及Moon Highway的创始人。Moon Highway是一家位于北加州的培训和课程开发公司。

译者序

时光如水,开发如梭。技术的发展让曾经高度耦合的前后端实现了分离,RESTful API 的诞生让含糊不清的接口有了清晰的表述,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是一种协议和一种查询语言。GraphQL API可以直接访问数据存储,但在大多数情况下,GraphQL API是一个数据聚合器和一个抽象层,一个可以提升开发速度、减少维护工作并让开发人员更快乐的层。
本书从GraphQL的历史和规范讲起,结合React和Apollo帮助读者从实际项目中了解GraphQL在服务端和客户端两方面的构建方式。本书也算是为GraphQL的布道尽一份力,推广一下下一代API的构建形式。
智慧如叶,飘落了今昔的优雅,迎来明日的翩跹。
技术随着时代发展而进步和变革的脚步从未停止。今天奉为圭臬的准则说不定就是明天的谬论。不断吐故纳新,才能让自己站在技术的前沿,跟上时代的潮流。我们站在前人的肩膀上,但又不能止于巨人的肩膀。不断追求看得更远才能继续攀登,智慧才能一代一代发展流传,生生不息。
感谢新浪移动大前端给我这次机会能够让我从事本书的翻译工作,能够为GraphQL的发展搭一阶台阶,倍感荣幸。也希望本书能帮到各位同行,让大家一起进步。

新浪移动大前端 郭笑鹏(大笑)
2019年5月于北京

图书目录

前言 1
第1章 欢迎来到GraphQL的世界 5
GraphQL是什么 6
GraphQL规范 8
GraphQL的设计原则 8
GraphQL的起源 9
数据传输的历史 10
远程过程调用 10
简单对象访问协议 10
表述性状态传递(REST) 10
REST的缺点 11
过量获取 11
获取不足 13
管理REST接口 15
现实世界中的GraphQL 15
GraphQL客户端库 15
第2章 图论 17
图论相关词汇 19
图论的历史 22
树就是图 25
现实世界中的图形结构 28
第3章 GraphQL查询语言 31
GraphQL API工具 33
GraphiQL 33
GraphQL Playground 35
公共GraphQL API 37
GraphQL查询字段 37
边和连接 40
片段 41
变更 47
使用查询变量 48
订阅 49
自检 50
抽象语法树 51
第4章 设计schema 53
定义类型 53
类型 54
标量类型 55
枚举 55
连接和列表 56
一对一连接 57
一对多连接 58
多对多连接 59
不同类型的列表 61
参数 63
筛选数据 64
变更 67
输入类型 68
返回类型 71
订阅类型 72
schema文档 73
第5章 创建一个GraphQL API 77
项目设置 77
解析器 78
根解析器 80
类型解析器 81
使用输入和枚举类型 84
边和连接 86
自定义标量 90
apollo-server-express 94
上下文 97
安装MongoDB 97
将数据库添加到上下文 98
GitHub授权 100
设置GitHub授权 100
授权流程 101
githubAuth变更操作 103
验证用户 106
总结 112
第6章 GraphQL客户端 113
使用GraphQL API 113
fetch请求 113
graphql-request 115
Apollo Client 117
在React中应用Apollo Client 118
启动项目 118
配置Apollo Client 119
Query组件 121
Mutation组件 124
授权 126
为用户授权 127
用户识别 130
添加缓存 132
取回策略 132
持久缓存 133
更新缓存 134
第7章 现实世界中的GraphQL 139
订阅 139
使用订阅 140
在项目中配置订阅 144
上传文件 148
在服务器端处理文件上传 149
通过Apollo Client上传一张新照片 151
安全 157
设置请求超时时间 157
数据限制 158
限制查询深度 158
限制查询复杂度 160
Apollo Engine 162
让我们更进一步 163
增量迁移 163
schema优先开发 164
GraphQL的业内活动 166
社区 167
加入社区聊天群组 167

教学资源推荐
作者: [美] 卢博米尔·佩尔科维奇(Ljubomir Perkovic) 著
作者: (美)Y. Daniel Liang 著
作者: 郝玉洁
作者: 谢满德 邵俊 编著
参考读物推荐