前 言
本书将向你详细介绍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)本书还使用了以下两个图标:
表示警告或重要的注意事项。
表示提示信息或操作技巧。