《精通API架构:设计、运维与演进》(英)詹姆斯・高夫(James Goug | PDF下载|ePub下载
精通API架构:设计、运维与演进 版权信息
- 出版社:机械工业出版社
- 出版时间:2024-07-01
- ISBN:9787111757467
- 条形码:9787111757467 ; 978-7-111-75746-7
精通API架构:设计、运维与演进 本书特色
大多数联网的组织都在构建和运维 API,这是客户开始与公司服务交互的门户。设计、构建和管理这些关键程序会影响组织中从工程师和产品所有者到*高管理层的每一个人。但开发人员和解决方案架构师面临的真正挑战是从头开始创建 API 平台。通过本书,你将学习构建和测试 REST API 的策略,这些REST API 使用 API 网关在微服务级别组合产品。三位作者解释了如何通过基础架构微调帮助工程师团队和组织平滑迁移到云,并创造使用服务网格等技术连接内部服务的机会。通过阅读本书,你将:·学习构建 API 平台的 API 基础知识和架构模式。 ·使用实际示例来了解如何设计、构建和测试基于 API 的系统。·部署、运维和配置 API 平台的关键组件。·根据案例研究合理使用 API 网关和服务网格。·了解 API 架构中的核心安全性和常见漏洞。·使用威胁建模以及 OAuth2 和 TLS 等技术保护数据和 API。·了解如何将现有系统向 API 和云架构演进。
精通API架构:设计、运维与演进 内容简介
本书分为四部分,共十章,提供了关于设计、运维和演进API架构的全景图。本书以一个虚拟的案例贯穿始终,即如何通过小步快跑的策略,将一个用三层架构方式设计的传统应用系统迭代为一个基于API的现代架构。全书囊括了从设计、测试、运维、安全、部署和发布等整个软件生命周期的各个环节,其中**部分介绍API的设计、构建和测试,第二部分介绍如何开展API流量管理,第三部分阐述API运维、发布和安全管理之道,第四部分介绍API架构的迭代演进。
精通API架构:设计、运维与演进 目录
序1
前言3
第0章 导论11
0.1 架构之旅11
0.2 API简介12
0.3 真实示例:会议系统案例研究13
0.3.1 会议案例研究中的 API 类型14
0.3.2 改进会议系统的原因15
0.3.3 从分层架构到API建模15
0.3.4 案例研究:演进步骤15
0.3.5 API 基础设施和流量模式17
0.3.6 会议系统案例研究的路线图17
0.4 使用C4图表18
0.4.1 C4上下文关系图18
0.4.2 C4容器图18
0.4.3 C4 组件图18
0.5 使用架构决策记录19
0.5.1 参会者演进ADR20
0.5.2 精通API:ADR指南20
0.6 小结21
**部分 设计、构建和测试API
第1章 设计、构建和规范API25
1.1 案例研究:设计参会者API25
1.2 REST介绍26
1.2.1 通过示例介绍REST和HTTP26
1.2.2 Richardson成熟度模型27
1.3 RPC API介绍28
1.4 GraphQL简要介绍29
1.5 REST API标准和结构29
1.5.1 集合和分页31
1.5.2 过滤集合32
1.5.3 错误处理32
1.5.4 ADR指南:选择API标准33
1.6 使用OpenAPI规范定义REST API33
1.7 OpenAPI规范的实际应用34
1.7.1 代码生成34
1.7.2 OpenAPI验证34
1.7.3 示例和模拟35
1.7.4 检测变更35
1.8 API版本控制35
1.8.1 语义化版本控制36
1.8.2 OpenAPI规范和版本控制37
1.9 用gRPC实现RPC38
1.10 交互建模和API格式选择40
1.10.1 高流量服务40
1.10.2 大尺寸交互负载40
1.10.3 HTTP/2的性能优势41
1.10.4 旧格式处理41
1.11 指南:交互建模41
1.12 同时使用多个规范42
1.12.1 是否存在黄金规范42
1.12.2 合并规范的挑战43
1.13 小结43
第2章 API接口测试45
2.1 本章的会议系统场景46
2.2 测试策略46
2.2.1 测试四象限47
2.2.2 测试金字塔48
2.2.3 用于测试策略的ADR指南50
2.3 契约测试50
2.3.1 契约测试的益处51
2.3.2 契约的实现方式51
2.3.3 ADR指南:契约测试55
2.4 API组件测试56
2.4.1 契约测试和组件测试的比较57
2.4.2 案例研究:用组件测试进行验证57
2.5 API集成测试58
2.5.1 使用存根服务器的好处和方法59
2.5.2 ADR指南:集成测试60
2.5.3 容器化测试组件:Testcontainers61
2.5.4 案例研究:使用Testcontainers验证集成61
2.6 端到端测试62
2.6.1 自动化端到端验证63
2.6.2 端到端测试的类型64
2.6.3 ADR指南:端到端测试64
2.7 小结65
第二部分 API流量管理
第3章 API网关:入口流量管理69
3.1 API网关是唯一解决方案吗69
3.2 指南:代理、负载均衡器或API网关70
3.3 案例研究:向消费者提供参会者服务71
3.4 什么是API网关71
3.5 API网关能提供哪些功能72
3.6 在哪里部署API网关72
3.7 API网关如何在网络边缘与其他技术集成73
3.8 为何使用API网关74
3.8.1 减少耦合:前端和后端之间的适配器/外观75
3.8.2 简化调用方式:聚合/转换后端服务75
3.8.3 保护API免受过度使用和滥用:威胁检测和防范76
3.8.4 了解API是如何被使用的:可观测性77
3.8.5 将API作为产品进行管理:API生命周期管理78
3.8.6 商业化API:账户管理、计费和支付79
3.9 API网关的现代史80
3.9.1 20世纪90年代以后:硬件负载均衡器80
3.9.2 21世纪00年代以后:软件负载均衡器80
3.9.3 21世纪00年代中期:应用程序交付控制器81
3.9.4 21世纪10年代初:**代API网关82
3.9.5 2015年以后:第二代API网关82
3.10 当前API网关分类83
3.10.1 传统企业网关84
3.10.2 微服务/微网关84
3.10.3 服务网格网关84
3.10.4 不同类型API网关比较84
3.11 案例研究:使用API网关改进会议系统85
3.11.1 在Kubernetes中安装Ambassador Edge Stack87
3.11.2 配置URL路径到后端服务的映射87
3.11.3 使用基于主机的路由配置映射88
3.12 部署API网关:了解和管理故障88
3.12.1 API网关成为单点故障89
3.12.2 检测问题并接管89
3.12.3 解决事故和故障89
3.12.4 防范风险90
3.13 常见的API网关实现陷阱90
3.13.1 API网关回路91
3.13.2 API网关作为ESB91
3.13.3 从上到下都是“乌龟”(API网关)91
3.14 选择API网关92
3.14.1 明确需求92
3.14.2 自建还是购买92
3.14.3 ADR指南:选择API网关92
3.15 小结93
第4章 服务网格:服务间流量管理95
4.1 服务网格是唯一解决方案吗95
4.2 指南:你应该采用服务网格吗96
4.3 案例研究:把议程功能提取成服务96
4.4 什么是服务网格98
4.5 服务网格能提供什么功能99
4.6 服务网格部署在何处100
4.7 服务网格如何与其他网络技术集成100
4.8 为何使用服务网格102 4.8 为何使用服务网格 ……………………………………………………………………….. 102 4.8.1 对路由、可靠性和流量管理的精细化控制 ……………………………………… 102 4.8.2 提供透明的可观测性 ……………………………………………………………………. 105 4.8.3 强化安全性:传输安全、验证和授权 …………………………………………….. 105 4.8.4 支持多语言的跨职能通信 ……………………………………………………………… 105 4.8.5 分离入站流量管理和服务间流量管理 …………………………………………….. 106 4.9 服务网格的演进历史 ……………………………………………………………………. 107 4.9.1 早年历史和动机 ………………………………………………………………………….. 107 4.9.2 实现方式 …………………………………………………………………………………….. 109 4.10 服务网格分类法 ………………………………………………………………………… 114 4.11 案例研究:使用服务网格来实现路由、可观测性和安全性 ………………… 115 4.11.1 用 Istio 进行路由选择 …………………………………………………………………. 115 4.11.2 用 Linkerd 观测流量 …………………………………………………………………… 117 4.11.3 用 Consul 进行网络分段 ……………………………………………………………… 119 4.12 部署服务网格:理解并管理故障 …………………………………………………… 121 4.13 常见的服务网格实施误区 ……………………………………………………………. 121 4.13.1 服务网格作为 ESB …………………………………………………………………….. 121 4.13.2 服务网格作为网关 ……………………………………………………………………… 121 4.13.3 太多的网络层 ……………………………………………………………………………. 122 4.14 选择服务网格 ……………………………………………………………………………. 122 4.14.1 明确需求 …………………………………………………………………………………… 122 4.14.2 自建还是购买 ……………………………………………………………………………. 122 4.14.3 检查清单:选择服务网格 ……………………………………………………………. 123 4.15 小结 ………………………………………………………………………………………… 124 第三部分 API 运维与安全 第 5 章 部署和发布 API ……………………………………….. 127 5.1 分离部署和发布 ………………………………………………………………………….. 127 5.1.1 案例研究:功能开关 ……………………………………………………………………. 128 5.1.2 流量管理 …………………………………………………………………………………….. 130 5.2 案例研究:建模会议系统的发布 …………………………………………………….. 130 5.2.1 API 生命周期 ………………………………………………………………………………. 130 5.2.2 将发布策略映射到生命周期 ………………………………………………………….. 131 5.2.3 ADR 指南:使用流量管理和功能开关将发布与部署分离 …………………. 132 5.3 发布策略 ……………………………………………………………………………………. 132 5.3.1 金丝雀发布 …………………………………………………………………………………. 133 5.3.2 流量镜像 …………………………………………………………………………………….. 134 5.3.3 蓝绿发布 …………………………………………………………………………………….. 135 5.4 案例研究:使用 Argo Rollouts 执行部署过程 …………………………………… 136 5.5 监控成功和识别失败 ……………………………………………………………………. 139 5.5.1 可观测性的三大支柱 ……………………………………………………………………. 140 5.5.2 API 的重要指标 …………………………………………………………………………… 140 5.5.3 读取信号 …………………………………………………………………………………….. 141 5.6 有效软件发布的应用程序决策 ……………………………………………………….. 142 5.6.1 响应缓存 …………………………………………………………………………………….. 142 5.6.2 应用层标头传播 ………………………………………………………………………….. 142 5.6.3 协助调试的日志 ………………………………………………………………………….. 143 5.6.4 考虑使用理念型平台 ……………………………………………………………………. 143 5.6.5 ADR 指南:理念型平台 ……………………………………………………………….. 143 5.7 小结 ………………………………………………………………………………………….. 144 第 6 章 运维安全性:API 的威胁建模 ……………………… 145 6.1 案例研究:将 OWASP 应用于参会者 API …………………………………………. 145 6.2 忽略外部 API 安全的风险 ……………………………………………………………… 146 6.3 威胁建模 101 ……………………………………………………………………………… 147 6.4 以攻击者思维思考 ……………………………………………………………………….. 148 6.5 如何进行威胁建模 ……………………………………………………………………….. 149 6.5.1 第 1 步:确定目标 ……………………………………………………………………….. 149 6.5.2 第 2 步:收集正确的信息 ……………………………………………………………… 150 6.5.3 第 3 步:分解系统 ……………………………………………………………………….. 150 6.5.4 第 4 步:识别威胁—以 STRIDE 为例 …………………………………………. 150 6.5.5 第 5 步:评估威胁的风险 ……………………………………………………………… 159 6.5.6 第 6 步:验证 ……………………………………………………………………………… 162 6.6 小结 ………………………………………………………………………………………….. 162 第 7 章 API 身份验证和授权 …………………………………. 163 7.1 身份验证 ……………………………………………………………………………………. 163 7.1.1 使用令牌进行*终用户身份验证 …………………………………………………… 164 7.1.2 系统对系统的认证 ……………………………………………………………………….. 165 7.1.3 为什么不能将密钥和用户混用 ………………………………………………………. 165 7.2 OAuth2 ……………………………………………………………………………………… 166 7.2.1 授权服务器在 API 交互中的角色 …………………………………………………… 167 7.2.2 JSON 网络令牌 ……………………………………………………………………………. 167 7.2.3 OAuth2 授权的术语和机制 ……………………………………………………………. 170 7.2.4 ADR 指南:我是否应该考虑使用 OAuth2 ………………………………………. 171 7.2.5 授权码授权 …………………………………………………………………………………. 171 7.2.6 刷新令牌 …………………………………………………………………………………….. 175 7.2.7 基于客户端凭据的授权 ………………………………………………………………… 175 7.2.8 其他 OAuth2 授权方式 …………………………………………………………………. 176 7.2.9 ADR 指南:选择支持哪些 OAuth2 授权方式 ………………………………….. 176 7.2.10 OAuth2 作用域 ………………………………………………………………………….. 177 7.2.11 授权执行 …………………………………………………………………………………… 178 7.3 OIDC 介绍 …………………………………………………………………………………. 179 7.4 SAML 2.0 …………………………………………………………………………………… 181 7.5 小结 ………………………………………………………………………………………….. 181 第四部分 使用 API 的演进架构 第 8 章 将应用程序重新设计为 API 驱动的架构 ………… 185 8.1 为何使用 API 来演进系统 ……………………………………………………………… 185 8.1.1 提取有用抽象:加强内聚 ……………………………………………………………… 186 8.1.2 划清领域边界:拥抱松耦合 ………………………………………………………….. 187 8.2 案例研究:建立参会者的领域界限 …………………………………………………. 188 8.3 *终状态架构选择 ……………………………………………………………………….. 188 8.3.1 单体架构 …………………………………………………………………………………….. 188 8.3.2 面向服务的架构 ………………………………………………………………………….. 189 8.3.3 微服务 ……………………………………………………………………………………….. 189 8.3.4 函数 …………………………………………………………………………………………… 189 8.4 管理演进过程 ……………………………………………………………………………… 190 8.4.1 明确目标 …………………………………………………………………………………….. 190 8.4.2 使用适应度函数 ………………………………………………………………………….. 190 8.4.3 将系统分解成模块 ……………………………………………………………………….. 191 8.4.4 创建 API 作为扩展的“拼接点” …………………………………………………….. 193 8.4.5 识别系统内的变更杠杆点 ……………………………………………………………… 194 8.4.6 持续交付和验证 ………………………………………………………………………….. 194 8.5 用 API 演进系统的架构模式 …………………………………………………………… 194 8.5.1 扼杀者 ……………………………………………………………………………………….. 195 8.5.2 外观和适配器 ……………………………………………………………………………… 196 8.5.3 API 分层蛋糕架构 ……………………………………………………………………….. 196 8.6 识别痛点和机会 ………………………………………………………………………….. 197 8.6.1 升级和维护问题 ………………………………………………………………………….. 197 8.6.2 性能问题 …………………………………………………………………………………….. 198 8.6.3 打破依赖性:高度耦合的 API……………………………………………………….. 198 8.7 小结 ………………………………………………………………………………………….. 198 第 9 章 使用 API 基础设施向云平台演进 …………………. 200 9.1 案例研究:将参会者服务迁移到云环境 …………………………………………… 200 9.2 选择云迁移策略 ………………………………………………………………………….. 201 9.2.1 保留或重审 …………………………………………………………………………………. 202 9.2.2 重新托管 …………………………………………………………………………………….. 202 9.2.3 平台化改造 …………………………………………………………………………………. 203 9.2.4 重新购买 …………………………………………………………………………………….. 203 9.2.5 重构 / 重新架构 …………………………………………………………………………… 203 9.2.6 退役 …………………………………………………………………………………………… 204 9.3 案例研究:将参会者服务迁移到云平台 …………………………………………… 204 9.4 API 管理的作用 …………………………………………………………………………… 205 9.5 南北向与东西向:模糊的流量管理界限 …………………………………………… 206 9.5.1 从外向内进行迁移 ……………………………………………………………………….. 206 9.5.2 跨越边界:跨网络路由 ………………………………………………………………… 206 9.6 从区域架构到零信任架构 ……………………………………………………………… 207 9.6.1 进入分区的世界 ………………………………………………………………………….. 207 9.6.2 不信任任何人并始终验证 ……………………………………………………………… 208 9.6.3 服务网格在零信任架构中的作用 …………………………………………………… 209 9.7 小结 ………………………………………………………………………………………….. 211 第 10 章 总结 ……………………………………………………. 213 10.1 案例研究:回顾 ………………………………………………………………………… 213 10.2 API、康威定律和组织机构 ………………………………………………………….. 218 10.3 了解决策类型 ……………………………………………………………………………. 219 10.4 准备好迎接未来 ………………………………………………………………………… 219 10.4.1 异步通信 …………………………………………………………………………………… 219 10.4.2 HTTP/3 …………………………………………………………………………………….. 220 10.4.3 基于平台的网格 …………………………………………………………………………. 220 10.5 如何不断学习 API 架构 ……………………………………………………………….. 220 10.5.1 不断磨炼基本功 …………………………………………………………………………. 221 10.5.2 了解*新行业新闻 ……………………………………………………………………… 221 10.5.3 雷达、象限和趋势报告 ………………………………………………………………. 221 10.5.4 学习*佳实践和用例 ………………………………………………………………….. 222 10.5.5 寓学于练 …………………………………………………………………………………… 222 10.5.6 教学相长 …………………………………………………………………………………… 223
精通API架构:设计、运维与演进 作者简介
James Gough是摩根士丹利的杰出工程师,Java Champion,也是Optimizing Java一书的合著者。
Daniel Bryant是Ambassador Labs的开发者关系主管,也是Java Champion。他的专长是DevOps工具、云/容器平台和微服务。
Matthew Auburn是摩根士丹利的副总裁。他曾从事金融系统、移动和 Web 应用程序以及 API 安全方面的工作。