商品详情

129.00

利用FastAPI构建Python微服务 [美] 舍温·约翰·C.特拉古拉 著,王婷 译 清华大学出版社

数量

商品详情

  

利用FastAPI构建Python微服务 [美] 舍温·约翰·C.特拉古拉 著,王婷 译 清华大学出版社


  内容简介

  《利用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

  前言/序言

  前 言

  本书将向你详细介绍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或Linux

  VS Code编辑器 任何操作系统的最新版本

  PostgreSQL 13.x 任何操作系统的64位版本

  MongoDB 5.x 任何操作系统的64位版本

  Mongo Compass 任何操作系统的64位版本

  Mongo Database Tools 任何操作系统的64位版本

  RabbitMQ 任何操作系统的最新版本

  Apache Kafka 任何操作系统的最新版本

  Spring STS 最新版本和配置为使用Java 12 JDK

  Docker Engine 任何操作系统的最新版本

  Jaeger 任何操作系统的最新版本

  Keycloak 使用Java 12 JDK的版本

  Bootstrap 4.x

  OpenSSL 任何操作系统的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 fastapi

  pip install uvicorn[standard]

  (4)术语或重要单词采用中英文对照形式给出,在括号内保留其英文原文。示例如下:

  反应式编程(reactive programming)是一种面向数据流和变化传播的编程范式,它涉及流(stream)的生成,这些流经过一系列操作来传播过程中的一些变化。Python有一个RxPY库,它提供了若干种方法,开发人员可以将这些方法异步应用于这些流,以根据订阅者的需要提取终端结果。

  (5)对于界面词汇或专有名词将保留其英文原文,在括号内添加其中文译文。示例如下:

  在输入Username(用户名)和Password(密码)后,单击登录表单上的Sign in(登录)按钮以检查你的凭据是否在数据库中。如果不在,则该应用程序会有/ch07/signup/add和 /ch07/approve/signup来添加你要测试的用户凭据。

  (6)本书还使用了以下两个图标:

  表示警告或重要的注意事项。

  表示提示信息或操作技巧。


相关产品推荐

服务参数

- 本商品享受上述商家服务 - 关闭

商品参数

×