书籍详情

利用FastAPI构建Python微服务

利用FastAPI构建Python微服务

作者:[美]舍温·约翰·C.特拉古拉 著,王婷 译

出版社:清华大学出版社

出版时间:2023-09-01

ISBN:9787302644866

定价:¥129.00

购买这本书可以去
内容简介
  《利用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
猜您喜欢

读书导航