GraphQL实战 写给全栈工程师们PDF电子书下载
- 电子书积分:9 积分如何计算积分?
- 作 者:(中国)王北南
- 出 版 社:北京:机械工业出版社
- 出版年份:2019
- ISBN:9787111630937
- 页数:184 页
第1章 GraphQL API设计和全栈开发 1
1.1 什么是GraphQL 2
1.2 分布式系统 2
1.2.1 扩展性 3
1.2.2 可靠性 3
1.2.3 远程资源共享 4
1.2.4 更强的处理能力 4
1.3 C/S架构与API 4
1.3.1 C/S架构 5
1.3.2 前端与后端 5
1.3.3 全栈程序员 5
1.3.4 应用程序接口 6
1.4 RESTful API的起源与特点 7
1.4.1 仓库保管员的窘境 7
1.4.2 REST无状态的好处 8
1.4.3 RESTful API是否真的无状态 8
1.4.4 RESTful API是否是数据传输协议 9
1.4.5 RESTful API的好处是什么 9
1.5 RESTful API的主要问题 10
1.5.1 数据定制的问题 10
1.5.2 多次请求的问题 10
1.5.3 异常处理的问题 10
1.5.4 返回数据格式未知的问题 11
1.5.5 请求Endpoint和方式过多的问题 11
1.6 GraphQL如何解决RESTful API的问题 11
1.6.1 GraphQL可以自由定制数据 11
1.6.2 GraphQL可以把多次请求合并为一个 12
1.6.3 GraphQL错误以及异常信息明确 12
1.6.4 GraphQL返回数据的形式和查询请求同构 13
1.6.5 GraphQL使用单一的Endpoint 14
1.6.6 GraphQL替代了什么 14
1.7 GraphQL引发的疑虑 15
1.7.1 GraphQL是否还是RESTful 15
1.7.2 GraphQL增大了后端系统设计的难度 15
1.7.3 GraphQL是否会带来后端性能问题 15
1.7.4 迁移到GraphQL的代价 16
1.7.5 GraphQL是该前端驱动还是后端驱动 16
1.8 GraphQL全栈框架的选用 16
1.8.1 Relay 17
1.8.2 Apollo 17
第2章 GraphQL初体验——电商API设计 18
2.1 基本开发环境的搭建 19
2.2 和GraphQL互动 20
2.2.1 实时交互界面GraphiQL的使用 20
2.2.2 通过curl发送请求 21
2.2.3 使用第三方客户端 21
2.3 Schema与定义数据类型 22
2.3.1 强类型的查询语言 22
2.3.2 服务器端的Schema 23
2.3.3 标量类型 24
2.3.4 自定义复杂类型 25
2.3.5 枚举 26
2.3.6 列表以及对象的列表 27
2.4 定义操作 28
2.4.1 只读查询操作 28
2.4.2 可写修改操作 30
2.4.3 订阅操作 31
2.4.4 传递输入类型 31
2.4.5 操作也是字段 33
2.5 精炼数据模型与操作 33
2.5.1 接口和继承 33
2.5.2 联合 35
2.6 精炼查询 36
2.6.1 使用变量 36
2.6.2 使用别名 37
2.6.3 使用片段 38
2.6.4 类型条件 39
2.6.5 使用Directive 40
2.6.6 后端工程师的福音 41
2.7 简单数据验证 41
2.7.1 必填值的验证 42
2.7.2 标量值的验证 42
第3章 电商网站前端开发 44
3.1 GraphQL前端开发要点 45
3.1.1 前端开发的主要任务 45
3.1.2 前端开发的难点 46
3.1.3 前端技术的选型 46
3.2 前端React项目初始化 47
3.2.1 React特点简介 47
3.2.2 React整合GraphQL前端系统设计 48
3.2.3 创建React前端工程 49
3.2.4 安装Apollo客户端 49
3.2.5 初始化GraphQL客户端 50
3.2.6 手动发送查询 51
3.3 只读数据的React UI组件 51
3.3.1 构建GraphQL Query查询 51
3.3.2 定义列表元素组件 52
3.3.3 定义列表组件 52
3.3.4 绑定静态查询和UI组件 53
3.3.5 使用Query组件 54
3.3.6 从Query组件中接收一个参数 55
3.3.7 数据的接收以及出错处理 56
3.3.8 手动刷新 57
3.4 修改数据的React UI组件 57
3.4.1 定义一个带有变量的Mutation操作 58
3.4.2 使用Mutation UI组件 58
3.5 支持订阅 59
3.5.1 什么时候使用订阅 59
3.5.2 订阅是如何实现的 60
3.6 本地数据 60
第4章 基于Node.js的GraphQL后端 61
4.1 GraphQL后端架构思想 62
4.1.1 “薄”层设计 62
4.1.2 “门户”设计 64
4.1.3 面向业务设计 64
4.2 GraphQL层的职责与实现 65
4.2.1 GraphQL层的职责 65
4.2.2 GraphQL层的实现 65
4.2.3 Resolver函数与分治策略 67
4.3 Apollo GraphQL后端框架 68
4.3.1 依赖库的安装 68
4.3.2 定义和解析Schema 69
4.3.3 绑定处理查询操作函数 69
4.4 详解Resolver函数 72
4.4.1 Resolver的各种返回类型 72
4.4.2 Resolve一个类型 72
4.4.3 Resolve一个复杂类型字段 73
4.4.4 Resolve一个标量字段 75
4.4.5 Resolve一个自定义标量字段 77
4.4.6 Resolve一个列表 80
4.5 GraphQL后端验证以及错误处理 81
4.5.1 简单方式 81
4.5.2 使用自定义标量类型进行验证 82
4.6 异步IO 84
4.6.1 基于异步非阻塞IO的JavaScript实现 84
4.6.2 同步还是异步 85
4.6.3 异步Resolver 85
4.7 使用JavaScript开发后端服务的问题 86
第5章 基于Go语言协程的GraphQL服务 88
5.1 使用协程和上下文 89
5.1.1 使用协程的原因 89
5.1.2 协程和GraphQL服务 90
5.1.3 上下文和作用域 90
5.1.4 派生上下文 91
5.2 Go语言的Web服务和中间件 92
5.2.1 构建Web服务 92
5.2.2 Web服务中间件 93
5.2.3 基于中间件的后端架构 94
5.2.4 数据收集中间件 95
5.2.5 数据库会话中间件 95
5.3 GraphQL Http请求的处理 97
5.3.1 GraphQL请求的解析 97
5.3.2 执行GraphQL查询和准备结果 98
5.3.3 合理使用Http请求上下文 100
5.5 使用Go语言的GraphQL后端是否会有性能问题 100
第6章 实体数据持久化建模与实现 102
6.1 基于ID的数据库访问层设计 103
6.1.1 系统和API设计 103
6.1.2 实现数据读取 104
6.1.3 实现数据写入 105
6.2 使用ID访问数据的好处 105
6.2.1 利于数据库查询性能优化 105
6.2.2 利于分片 106
6.2.3 利于和缓存结合 106
6.2.4 防止重复读取同一资源 106
6.2.5 利于Resolver函数实现 106
6.3 建立基于ID的抽象Schema数据类型 107
6.3.1 Relay的Schema设计方案 107
6.3.2 Relay的GraphQL查询设计 107
6.4 分布式ID生成算法 108
6.4.1 Snowflake ID 108
6.4.2 Fast ID的安装和代码示例 108
6.4.3 推荐设置 109
6.5 GraphQL连接数据库访问层 109
6.5.1 用户数据PAO实例 110
6.5.2 PAO在GraphQL后端架构中存在的意义 111
6.6 简单分页设计 111
6.6.1 简单分页设计 112
6.6.2 Cursor分页方式 113
6.6.3 客户端分页显示 114
6.6.4 服务器端Resolve分页 114
6.7 一对多关系 115
6.7.1 Schema和Resolver函数定义 116
6.7.2 外键方式 116
6.7.3 聚合方式 117
第7章 “关系”的设计和持久化 118
7.1 用户关系建模 119
7.1.1 如何表达“图” 119
7.1.2 基本设计思路 120
7.2 边的集合与游标分页 120
7.2.1 边的简单表达 120
7.2.2 边的简单分页 121
7.2.3 边的游标分页 122
7.3 借鉴Relay的边设计方案 123
7.4 “关系”数据的数据访问层设计 124
第8章 全栈API优化 125
8.1 前后端数据的一致性 126
8.1.1 数据的存在形式 126
8.1.2 Query与Mutation 126
8.2 客户端缓存更新机制 128
8.2.1 客户端使用Mutation更新缓存 128
8.2.2 定制更新缓存 129
8.3 出错、超时与重试 130
8.3.1 错误信息的定义 130
8.3.2 服务器端如何返回出错信息 131
8.3.3 客户端如何处理出错 132
8.4 使用高阶函数来优化GraphQL组件 132
8.4.1 高阶函数 133
8.4.2 使用函数式的声明方式 133
8.4.3 使用Recompose 134
8.5 通盘考虑API设计 135
8.5.1 面向真实数据关系建模 135
8.5.2 遗留数据建模 136
8.6 自省和文档 136
8.6.1 命名比文档重要 136
8.6.2 自省 137
8.6.3 文档 139
8.6.4 API的升级与兼容性 140
第9章 认证与授权 141
9.1 基于Http协议的用户认证 142
9.1.1 使用Cookie的认证方式 142
9.1.2 使用访问令牌Token的认证方式 142
9.2 基于访问令牌Token的用户认证 143
9.2.1 访问令牌的生成 143
9.2.2 GraphQL整合Token要点 144
9.2.3 服务器端拿到Token以后做什么 144
9.3 查询操作层面的权限控制 145
9.3.1 设计GraphQL的授权服务 146
9.3.2 JWT Token中数据的定义 146
9.3.3 JWT Token的生成 147
9.3.4 验证Token中间件 148
9.3.5 解析和验证Token 148
9.3.6 通过上下文传递授权信息 149
9.3.7 数据细粒度的权限控制 150
第10章 高并发后端优化 151
10.1 处理N+1问题 152
10.1.1 什么是N+1问题 152
10.1.2 N+1问题为什么会危害性能 152
10.1.3 解决N+1问题的思路 153
10.1.4 GraphQL如何批处理查询 153
10.2 使用DataLoader 154
10.2.1 DataLoader的工作模式 154
10.2.2 批处理函数 156
10.2.3 DataLoader与下游服务 157
10.2.4 批处理函数对于error的处理 157
10.2.5 为每个Http请求创建DataLoader 157
10.3 使用Cache 159
10.3.1 GraphQL与RESTful API对缓存的不同设计 159
10.3.2 Memcached的查询与优化 160
10.3.3 Redis的查询与优化 161
10.4 NoSQL与下游服务的数据库查询与优化 161
10.4.1 使用内嵌对象存储数据 161
10.4.2 使用对象引用存储数据 162
10.4.3 基于列Column存储的数据建模 162
10.4.4 下游服务数据源的优化 163
10.5 SQL数据库的数据查询合并与优化 163
10.5.1 基于Key-Value设计的SQL数据库优化 163
10.5.2 基于传统数据库查询的数据库优化 164
10.5.3 高并发下的SQL数据查询瓶颈 164
10.6 GraphQL与大数据和机器学习 166
10.6.1 使用GraphQL获取实时数据 166
10.6.2 获取大批次对象团的问题 167
10.6.3 高频访问GraphQL服务的问题 167
10.6.4 GraphQL应用的数据采集 168
第11章 测试与部署 170
11.1 单元测试 171
11.1.1 在Resolver函数中使用依赖注入 171
11.1.2 创建Mock对象 172
11.1.3 编写单元测试代码 173
11.2 集成测试 174
11.2.1 准备环境 174
11.2.2 准备客户端 174
11.2.3 编写测试用例并验证结果 175
11.2.4 持续集成 175
11.3 压力测试与Profiling 176
11.3.1 简单压力测试 177
11.3.2 Fork生产环境流量 177
11.3.3 使用访问日志进行压力测试 178
11.3.4 Diffy测试 178
11.4 开发环境部署 179
11.4.1 配置下游服务 179
11.4.2 负载均衡的部署 180
11.5 生产环境弹性部署 181
11.5.1 服务注册与发现 182
11.5.2 高可用性系统 183
后记 184
- 《市政工程基础》杨岚编著 2009
- 《工程静力学》王科盛主编 2019
- 《中央财政支持提升专业服务产业发展能力项目水利工程专业课程建设成果 设施农业工程技术》赵英编 2018
- 《Maya 2018完全实战技术手册》来阳编著 2019
- 《化学反应工程》许志美主编 2019
- 《Python3从入门到实战》董洪伟 2019
- 《绿色过程工程与清洁生产技术 张懿院士论文集精选 上》《绿色过程工程与清洁生产技术》编写组编 2019
- 《软件工程》齐治昌,谭庆平,宁洪编著 2019
- 《大数据Hadoop 3.X分布式处理实战》吴章勇,杨强 2020
- 《星空摄影后期实战》阿五在路上著 2020
- 《国学经典诵读》(中国)严琼燕 2019
- 《思维导图 超好用英语单词书》(中国)王若琳 2019
- 《东北民歌文化研究及艺术探析》(中国)杨清波 2019
- 《中国当代乡土小说文库 本乡本土》(中国)刘玉堂 2019
- 《两京烟云》陈诗泳,赖秀俞责任编辑;(中国)千慧 2019
- 《HTML5从入门到精通 第3版》(中国)明日科技 2019
- 《MBA大师.2020年MBAMPAMPAcc管理类联考专用辅导教材 数学考点精讲》(中国)董璞 2019
- 《莼江曲谱 2 中国昆曲博物馆藏稀见昆剧手抄曲谱汇编之一》郭腊梅主编;孙伊婷副主编;孙文明,孙伊婷编委;中国昆曲博物馆编 2018
- 《学前儿童发展心理学 第2版》刘万伦主编;王文秀,甘卫群,刘万伦编写人员 2019
- 《中国制造业绿色供应链发展研究报告》中国电子信息产业发展研究院 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《高等教育双机械基础课程系列教材 高等学校教材 机械设计课程设计手册 第5版》吴宗泽,罗圣国,高志,李威 2018
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019
- 《高等院校旅游专业系列教材 旅游企业岗位培训系列教材 新编北京导游英语》杨昆,鄢莉,谭明华 2019
- 《中国十大出版家》王震,贺越明著 1991
- 《近代民营出版机构的英语函授教育 以“商务、中华、开明”函授学校为个案 1915年-1946年版》丁伟 2017
- 《新工业时代 世界级工业家张毓强和他的“新石头记”》秦朔 2019
- 《智能制造高技能人才培养规划丛书 ABB工业机器人虚拟仿真教程》(中国)工控帮教研组 2019
- 《AutoCAD机械设计实例精解 2019中文版》北京兆迪科技有限公司编著 2019