新書推薦:
《
冯友兰和青年谈心系列
》
售價:NT$
762.0
《
利他主义的生意:偏爱“非理性”的市场(英国《金融时报》推荐读物!)
》
售價:NT$
352.0
《
认知行为疗法:心理咨询的顶层设计
》
售價:NT$
454.0
《
FANUC工业机器人装调与维修
》
售價:NT$
454.0
《
吕著中国通史
》
售價:NT$
286.0
《
爱琴海的光芒 : 千年古希腊文明
》
售價:NT$
908.0
《
不被他人左右:基于阿德勒心理学的无压力工作法
》
售價:NT$
301.0
《
SDGSAT-1卫星热红外影像图集
》
售價:NT$
2030.0
編輯推薦:
《利用FastAPI构建Python微服务》将向你详细介绍FastAPI框架及其组件,以及如何联合应用这些组件与一些第三方工具来构建微服务应用程序。读者需要具备一些Python编程背景、API开发原理知识以及对创建企业级微服务应用程序背后原理的理解。这不仅仅是一本参考用书,它还提供一些代码蓝图,在阐释和演示各章主题的同时,还可以帮助开发人员解决实际应用问题。
內容簡介:
《利用FastAPI构建Python微服务》详细阐述了与分布式机器学习相关的基本解决方案,主要包括设置 FastAPI,探索核心功能,依赖注入研究,构建微服务应用程序,连接到关系数据库,使用非关系数据库,保护REST API的安全,创建协程、事件和消息驱动的事务,利用其他高级功能,解决数值、符号和图形问题,添加其他微服务功能等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。
關於作者:
舍温·约翰·C.特拉古拉是Java、ASP.NET MVC和Python应用程序方面的主题专家,并且还具有一些前端框架背景。他管理着一个开发团队来构建与制造和固定资产、文档管理、记录管理、POS以及库存系统相关的各种应用程序。作为顾问,他拥有构建实验室信息管理系统(laboratory information management system,LIMS)和混合移动应用程序的背景。自2010年以来,他还为Python、Django、Flask、Jakarta EE、C#、ASP.NET MVC、JSF、Java和一些前端框架的课程提供企业新人培训服务。他撰写了Spring MVC Blueprints和Spring 5 Cookbook之类的书籍,另外还发布了Packt视频Modern Java Web Applications with Spring Boot 2.x。
目錄 :
第1篇 与FastAPI微服务开发应用相关的架构概念
第1章 设置FastAPI 3
1.1 技术要求 3
1.2 设置开发环境 4
1.3 初始化和配置FastAPI 5
1.4 设计和实现REST API 6
1.5 管理用户请求和服务器响应 9
1.5.1 参数类型声明 9
1.5.2 路径参数 10
1.5.3 查询参数 12
1.5.4 默认参数 13
1.5.5 可选参数 14
1.5.6 混合所有类型的参数 16
1.5.7 请求正文 16
1.5.8 请求标头 19
1.5.9 响应数据 20
1.6 处理表单参数 21
1.7 管理cookie 22
1.8 小结 23
第2章 探索核心功能 25
2.1 技术要求 25
2.2 构建和组织大型项目 26
2.2.1 实现API服务 27
2.2.2 导入模块组件 28
2.2.3 实现新的main.py文件 29
2.3 管理与API相关的异常 30
2.3.1 单个状态代码响应 30
2.3.2 多个状态代码 32
2.3.3 引发HTTPException 33
2.3.4 自定义异常 34
2.3.5 默认处理程序覆盖 36
2.4 将对象转换为与JSON兼容的类型 37
2.5 管理API响应 38
2.6 创建后台进程 40
2.7 使用异步路径操作 42
2.8 应用中间件以过滤路径操作 43
2.9 小结 45
第3章 依赖注入研究 47
3.1 技术要求 47
3.2 应用控制反转和依赖注入 48
3.2.1 注入依赖函数 49
3.2.2 注入可调用的类 50
3.2.3 构建嵌套依赖关系 51
3.2.4 缓存依赖项 53
3.2.5 声明Depends()参数类型 54
3.2.6 注入异步依赖项 55
3.3 探索注入依赖项的方法 55
3.3.1 在服务参数列表上发生的依赖注入 55
3.3.2 在路径运算符中发生的依赖注入 56
3.3.3 针对路由器的依赖注入 57
3.3.4 针对main.py的依赖注入 60
3.4 基于依赖关系组织项目 61
3.4.1 模型层 62
3.4.2 存储库层 63
3.4.3 存储库工厂方法 65
3.4.4 服务层 65
3.4.5 REST API和服务层 66
3.4.6 实际项目结构 67
3.5 使用第三方容器 67
3.5.1 使用可配置容器—Dependency Injector 68
3.5.2 使用Lagom模块 72
3.5.3 FastAPI和Lagom集成 72
3.6 可依赖项的范围 73
3.7 小结 74
第4章 构建微服务应用程序 75
4.1 技术要求 75
4.2 应用分解模式 76
4.2.1 按业务单元分解 76
4.2.2 创建子应用程序 78
4.3 挂载子模块 79
4.4 创建通用网关 80
4.5 实现主端点 80
4.6 评估微服务ID 81
4.7 应用异常处理程序 82
4.8 集中日志记录机制 83
4.8.1 微服务架构可能面临的日志问题 83
4.8.2 使用Loguru模块 84
4.9 构建日志中间件 85
4.9.1 中间件实现示例 86
4.9.2 使用REST API服务 88
4.10 使用httpx模块 88
4.11 使用requests模块 90
4.12 应用领域建模方法 91
4.13 创建层 92
4.14 识别领域模型 92
4.15 构建存储库层和服务层 94
4.15.1 存储库层模式 94
4.15.2 服务层模式 96
4.15.3 使用工厂方法模式 97
4.16 管理微服务的配置细节 97
4.16.1 将设置存储为类属性 98
4.16.2 在属性文件中存储设置 99
4.17 小结 101
第2篇 以数据为中心的微服务和专注于通信的微服务
第5章 连接到关系数据库 105
5.1 技术要求 106
5.2 准备数据库连接 106
5.3 使用SQLAlchemy创建同步CRUD事务 107
5.3.1 安装数据库驱动程序 108
5.3.2 设置数据库连接 108
5.3.3 初始化会话工厂 109
5.3.4 定义Base类 109
5.3.5 构建模型层 110
5.3.6 映射表关系 111
5.3.7 实现存储库层 113
5.3.8 建立CRUD事务 113
5.3.9 创建连接查询 116
5.3.10 运行事务 117
5.3.11 创建表 119
5.4 使用SQLAlchemy实现异步CRUD事务 120
5.4.1 安装兼容asyncio的数据库驱动程序 120
5.4.2 设置数据库的连接 121
5.4.3 创建会话工厂 121
5.4.4 创建Base类和模型层 122
5.4.5 构建存储库层 122
5.4.6 运行CRUD事务 125
5.5 使用GINO实现异步CRUD事务 126
5.5.1 安装数据库驱动程序 127
5.5.2 建立数据库连接 127
5.5.3 构建模型层 127
5.5.4 映射表关系 128
5.5.5 实现CRUD事务 130
5.5.6 运行CRUD事务 133
5.5.7 创建表 134
5.6 将Pony ORM用于存储库层 135
5.6.1 安装数据库驱动程序 135
5.6.2 创建数据库连接 135
5.6.3 定义模型类 135
5.6.4 实现CRUD事务 138
5.6.5 运行存储库事务 141
5.6.6 创建表 142
5.7 使用Peewee构建存储库 142
5.7.1 安装数据库驱动程序 142
5.7.2 创建数据库连接 142
5.7.3 创建表和领域层 143
5.7.4 实现CRUD事务 146
5.7.5 运行CRUD事务 148
5.8 应用CQRS设计模式 148
5.8.1 定义处理程序接口 149
5.8.2 创建命令和查询类 149
5.8.3 创建命令和查询处理程序 150
5.8.4 访问处理程序 151
5.9 小结 152
第6章 使用非关系数据库 155
6.1 技术要求 156
6.2 设置数据库环境 156
6.3 应用PyMongo驱动程序进行同步连接 158
6.3.1 设置数据库连接 159
6.3.2 构建模型层 160
6.3.3 建立文档关联 161
6.3.4 使用BaseModel类 162
6.3.5 使用Pydantic验证 164
6.3.6 使用Pydantic @dataclass查询文档 164
6.3.7 实现存储库层 167
6.3.8 构建CRUD事务 167
6.3.9 管理文档关联 170
6.3.10 运行事务 171
6.4 使用Motor创建异步CRUD事务 174
6.4.1 设置数据库连接 174
6.4.2 创建模型层 175
6.4.3 构建异步存储层 175
6.4.4 运行CRUD事务 177
6.5 使用MongoEngine实现CRUD事务 178
6.5.1 建立数据库连接 178
6.5.2 构建模型层 179
6.5.3 创建文档关联 180
6.5.4 应用自定义序列化和反序列化 182
6.5.5 实现CRUD事务 182
6.5.6 管理嵌入文档 184
6.5.7 运行CRUD事务 185
6.6 使用Beanie实现异步CRUD事务 186
6.6.1 创建数据库连接 186
6.6.2 定义模型类 187
6.6.3 创建文档关联 189
6.6.4 实现CRUD事务 189
6.6.5 运行存储库事务 191
6.7 使用ODMantic为FastAPI构建异步存储库 191
6.7.1 创建数据库连接 191
6.7.2 创建模型层 192
6.7.3 建立文档关联 193
6.7.4 实现CRUD事务 193
6.7.5 运行CRUD事务 195
6.8 使用MongoFrames创建CRUD事务 196
6.8.1 创建数据库连接 196
6.8.2 构建模型层 197
6.8.3 创建文档关联 198
6.8.4 创建存储库层 198
6.8.5 应用存储库层 200
6.9 小结 201
第7章 保护REST API的安全 203
7.1 技术要求 204
7.2 实现Basic和Digest身份验证 204
7.2.1 使用Basic身份验证 204
7.2.2 应用HTTPBasic和HTTPBasicCredentials 204
7.2.3 执行登录事务 207
7.2.4 使用Digest身份验证 208
7.2.5 生成哈希凭据 209
7.2.6 传递用户凭据 209
7.2.7 使用HTTPDigest和HTTPAuthorizationCredentials 210
7.2.8 执行登录事务 211
7.3 实现基于密码的身份验证 212
7.3.1 安装python-multipart模块 212
7.3.2 使用OAuth2PasswordBearer和OAuth2PasswordRequestForm 212
7.3.3 执行登录事务 213
7.3.4 保护端点的安全 216
7.4 应用JWT 217
7.4.1 生成密钥 217
7.4.2 创建access_token 218
7.4.3 创建登录事务 218
7.4.4 访问安全端点 219
7.5 创建基于作用域的授权 220
7.5.1 自定义OAuth2类 221
7.5.2 构建权限字典 221
7.5.3 实现登录事务 222
7.5.4 将作用域应用于端点 223
7.6 构建授权码流 225
7.6.1 应用OAuth2AuthorizationCodeBearer 225
7.6.2 实现授权请求 226
7.6.3 实现授权码响应 227
7.7 应用OpenID Connect规范 228
7.7.1 使用HTTPBearer 229
7.7.2 安装和配置Keycloak环境 229
7.7.3 设置Keycloak领域和客户端 229
7.7.4 创建用户和用户角色 231
7.7.5 为客户端分配角色 232
7.7.6 通过作用域创建用户权限 233
7.7.7 将Keycloak与FastAPI集成在一起 234
7.7.8 实现令牌验证 236
7.7.9 将Auth0与FastAPI集成在一起 237
7.7.10 将Okta与FastAPI集成在一起 239
7.8 使用内置中间件进行身份验证 239
7.9 小结 240
第8章 创建协程、事件和消息驱动的事务 241
8.1 技术要求 241
8.2 实现协程 242
8.2.1 应用协程切换 242
8.2.2 应用@asyncio.coroutine 242
8.2.3 使用async/await结构 244
8.2.4 设计异步事务 245
8.2.5 使用HTTP/2协议 248
8.3 创建异步后台任务 248
8.3.1 使用协程 248
8.3.2 创建多个任务 249
8.4 了解Celery任务 250
8.4.1 创建和配置Celery实例 251
8.4.2 创建任务 252
8.4.3 调用任务 253
8.4.4 启动工作服务器 254
8.4.5 监控任务 255
8.5 使用RabbitMQ构建消息驱动的事务 256
8.5.1 创建Celery实例 256
8.5.2 监控AMQP消息传递 256
8.6 使用Kafka构建发布/订阅消息 257
8.6.1 运行Kafka代理和服务器 258
8.6.2 创建主题 258
8.6.3 实现发布者 258
8.6.4 在控制台上运行使用者 259
8.7 实现异步服务器发送事件 260
8.8 构建异步WebSocket 262
8.8.1 实现异步WebSocket端点 262
8.8.2 实现WebSocket客户端 263
8.9 在任务中应用反应式编程 264
8.9.1 使用协程创建Observable数据 265
8.9.2 创建后台进程 267
8.9.3 访问API资源 268
8.10 自定义事件 270
8.10.1 定义启动事件 270
8.10.2 定义关闭事件 270
8.11 小结 271
第3篇 与基础设施相关的问题、数字和符号计算、测试微服务
第9章 利用其他高级功能 275
9.1 技术要求 275
9.2 应用会话管理 276
9.2.1 创建用户会话 276
9.2.2 管理会话数据 278
9.2.3 删除会话 280
9.2.4 自定义BaseHTTPMiddleware 280
9.3 管理CORS机制 282
9.4 自定义APIRoute和Request 284
9.4.1 管理数据正文、表单或JSON数据 284
9.4.2 加密和解密消息正文 287
9.5 选择适当的响应 288
9.5.1 设置Jinja2模板引擎 292
9.5.2 设置静态资源 292
9.5.3 创建模板布局 292
9.5.4 使用ORJSONResponse和UJSONResponse 294
9.6 应用OpenAPI 3.x规范 295
9.6.1 扩展OpenAPI模式定义 295
9.6.2 使用内部代码库属性 298
9.6.3 使用Query、Form、Body和Path函数 300
9.7 测试API端点 303
9.7.1 编写单元测试用例 303
9.7.2 模拟依赖项 304
9.7.3 运行测试方法 306
9.8 小结 307
第10章 解决数值、符号和图形问题 309
10.1 技术要求 309
10.2 设置项目 310
10.2.1 使用Piccolo ORM 310
10.2.2 创建数据模型 312
10.2.3 实现存储层 313
10.2.4 Beanie ODM 314
10.3 实现符号计算 314
10.3.1 创建符号表达式 314
10.3.2 求解线性表达式 315
10.3.3 求解非线性表达式 316
10.3.4 求解线性和非线性不等式 317
10.4 创建数组和DataFrame 317
10.4.1 应用NumPy的线性系统操作 318
10.4.2 应用pandas模块 319
10.5 执行统计分析 320
10.6 生成CSV和XLSX报告 321
10.7 绘制数据模型 325
10.8 模拟BPMN工作流 328
10.8.1 设计BPMN工作流 328
10.8.2 实现工作流 329
10.9 使用GraphQL查询和突变 331
10.9.1 设置GraphQL平台 332
10.9.2 创建记录的插入、更新和删除 332
10.9.3 实现查询事务 334
10.9.4 运行CRUD事务 334
10.10 利用Neo4j图数据库 336
10.10.1 设置Neo4j数据库 337
10.10.2 创建CRUD事务 337
10.11 小结 340
第11章 添加其他微服务功能 343
11.1 技术要求 343
11.2 设置虚拟环境 344
11.3 检查API属性 346
11.4 实现OpenTracing机制 347
11.5 设置服务注册表和客户端服务发现 350
11.5.1 实现客户端服务发现 351
11.5.2 设置Netflix Eureka服务注册表 352
11.6 使用Docker部署和运行应用程序 353
11.6.1 生成requirements.txt文件 353
11.6.2 创建Docker镜像 354
11.6.3 使用Mongo Docker镜像 355
11.6.4 创建容器 355
11.7 使用Docker Compose进行部署 356
11.8 使用NGINX作为API网关 357
11.9 集成Flask和Django子应用程序 358
11.10 小结 360
內容試閱 :
本书将向你详细介绍FastAPI框架及其组件,以及如何联合应用这些组件与一些第三方工具来构建微服务应用程序。读者需要具备一些Python编程背景、API开发原理知识以及对创建企业级微服务应用程序背后原理的理解。这不仅仅是一本参考用书,它还提供一些代码蓝图,在阐释和演示各章主题的同时,还可以帮助开发人员解决实际应用问题。本书读者本书适用于想要学习如何使用FastAPI框架来实现微服务的Python Web开发人员、高级Python用户和使用Flask或Django的后端开发人员。熟悉REST API和微服务的读者也可以从本书中受益。本书的某些章节包含中级开发人员和Python爱好者也可以涉猎的一般概念、过程和说明。内容介绍本书分为3篇,共11章。具体内容安排如下。第1篇为“与FastAPI微服务开发应用相关的架构概念”,包括第1~4章。第1章“设置FastAPI”,介绍如何使用核心模块类和装饰器创建FastAPI端点,以及如何通过FastAPI框架管理传入的API请求和传出的响应。第2章“探索核心功能”,详细阐释FastAPI的异步端点、异常处理机制、后台进程、用于项目组织的APIRouter、内置JSON编码器和FastAPI的 JSON响应等。第3章“依赖注入研究”,深入探讨FastAPI使用其Depends()指令和第三方扩展模块管理实例和项目结构的依赖注入(dependency injection,DI)模式。第4章“构建微服务应用程序”,介绍支持微服务构建的原则和设计模式,例如分解、属性配置、日志记录和领域建模策略等。第2篇为“以数据为中心的微服务和专注于通信的微服务”,包括第5~8章。第5章“连接到关系数据库”,重点介绍Python对象关系映射器(object relational mapper,ORM)。它可以与FastAPI无缝集成,以使用PostgreSQL数据库来持久化和管理数据。第6章“使用非关系数据库”,介绍一些流行的Python对象文档映射器 (object document mapper,ODM),它们可以将FastAPI应用程序连接到MongoDB服务器上。包括PyMongo、Motor、MongoEngine、Beanie、ODMantic和MongoFrames等。第7章“保护REST API的安全”,重点介绍FastAPI的内置安全模块类,并探讨一些第三方工具,例如JWT、Keycloak、Okta和Auth0,以及如何应用它们来实现不同的安全方案以保护应用程序。第8章“创建协程、事件和消息驱动的事务”,详细阐释FastAPI在异步编程方面的细节,演示协程的使用、asyncio环境、使用Celery的异步后台进程、使用RabbitMQ和Apache Kafka的异步消息传递、异步服务器发送事件(serrer-sent event,SSE)、WebSocket和异步事件等。第3篇为“与基础设施相关的问题、数字和符号计算、测试微服务”,包括第 9~11章。第9章“利用其他高级功能”,讨论FastAPI可以提供的其他功能,例如它对不同响应类型的支持,中间件、请求和响应的自定义,其他JSON编码器的应用以及绕过跨域资源共享(cross-origin resource sharing,CORS)的浏览器策略。第10章“解决数值、符号和图形问题”,重点介绍FastAPI与numpy、pandas、matplotlib、sympy和scipy模块的集成,来实现可以执行数值和符号计算以解决数学和统计问题的API服务。第11章“添加其他微服务功能”,讨论其他架构问题,例如在运行时监控和检查API端点的属性、实现OpenTracing机制、设置服务注册表和客户端服务发现、使用Docker部署和运行应用程序、使用NGINX作为API网关以及集成Flask和Django子应用程序等。充分利用本书读者学习本书内容需要一些使用Python 3.8或3.9进行Python编程的经验,以及使用任何Python框架的一些API开发经验。为充分理解和掌握本书内容,读者还需要了解有关Python编码的标准和最佳实践,包括一些高级主题,例如创建装饰器、生成器、数据库连接、请求-响应事务、HTTP状态代码和API端点等。本书涵盖的软硬件和操作系统需求如表P.1所示。表P.1 本书涵盖的软硬件和操作系统需求本书涵盖的软硬件 操作系统需求Python 3.8/3.9 Windows、macOS或LinuxVS Code编辑器 任何操作系统的最新版本PostgreSQL 13.x 任何操作系统的64位版本MongoDB 5.x 任何操作系统的64位版本Mongo Compass 任何操作系统的64位版本Mongo Database Tools 任何操作系统的64位版本RabbitMQ 任何操作系统的最新版本Apache Kafka 任何操作系统的最新版本Spring STS 最新版本和配置为使用Java 12 JDKDocker Engine 任何操作系统的最新版本Jaeger 任何操作系统的最新版本Keycloak 使用Java 12 JDK的版本Bootstrap 4.xOpenSSL 任何操作系统的64位版本Google Chrome此外,还需要在Okta和Auth0中为OpenID连接安全方案开设一个账户。两者都喜欢使用公司电子邮件进行注册。建议读者自己输入代码或从本书的GitHub存储库中访问代码(下一节提供链接地址)。这样做将帮助你避免复制和粘贴代码可能带来的潜在错误。本书每章都有一个专门的项目原型,用于描述和解释主题。如果在安装过程中出现问题,则每个项目都有一个备份数据库(.sql或.zip)和一个模块列表(requirements.txt)来解决问题。运行\\i PostgreSQL命令即可安装脚本文件或使用已安装的Mongo Database Tools中的mongorestore来加载所有数据库内容。此外,每个项目都有一个很小的自述文件,对原型想要完成的内容进行一般性描述。下载示例代码文件本书随附的代码可以在GitHub存储库中找到,其网址如下:https://github.com/PacktPublishing/Building-Python-Microservices-with-FastAPI 如果代码有更新,那么它将在该GitHub存储库中被更新。下载彩色图像我们还提供了一个PDF文件,其中包含本书使用的屏幕截图/图表的彩色图像。你可以通过以下地址进行下载: https://packt.link/ohTNw本书约定本书中使用了许多文本约定。(1)有关代码块的设置如下: @app.delete(”/ch01/login/remove/{username}”)def delete_user(username: str): del valid_users[username] return {”message”: ”deleted user”} (2)对于想要强调和突出的代码,将以粗体形式进行显示: @app.get(”/ch01/login/”)def login(username: str, password: str): if valid_users.get(username) == None: return {”message”: ”user does not exist”} else: user = valid_users.get(username) (3)任何命令行的输入或输出都采用如下所示的粗体代码形式: pip install fastapipip install uvicorn[standard] (4)术语或重要单词采用中英文对照形式给出,在括号内保留其英文原文。示例如下: 反应式编程(reactive programming)是一种面向数据流和变化传播的编程范式,它涉及流(stream)的生成,这些流经过一系列操作来传播过程中的一些变化。Python有一个RxPY库,它提供了若干种方法,开发人员可以将这些方法异步应用于这些流,以根据订阅者的需要提取终端结果。 (5)对于界面词汇或专有名词将保留其英文原文,在括号内添加其中文译文。示例如下: 在输入Username(用户名)和Password(密码)后,单击登录表单上的Sign in(登录)按钮以检查你的凭据是否在数据库中。如果不在,则该应用程序会有/ch07/signup/add和 /ch07/approve/signup来添加你要测试的用户凭据。 (6)本书还使用了以下两个图标: 表示警告或重要的注意事项。 表示提示信息或操作技巧。