利用 FastAPI 構建 Python 微服務 Building Python Microservices with FastAPI: Build secure, scalable, and structured Python microservices from design concepts to infrastructure

[美]舍溫·約翰·C.特拉古拉 著 王婷 譯

  • 利用 FastAPI 構建 Python 微服務-preview-1
  • 利用 FastAPI 構建 Python 微服務-preview-2
  • 利用 FastAPI 構建 Python 微服務-preview-3
利用 FastAPI 構建 Python 微服務-preview-1

買這商品的人也買了...

商品描述

《利用FastAPI構建Python微服務》詳細闡述了與分佈式機器學習相關的基本解決方案,主要包括設置 FastAPI,探索核心功能,依賴註入研究,構建微服務應用程序,連接到關系數據庫,使用非關系數據庫,保護REST API的安全,創建協程、事件和消息驅動的事務,利用其他高級功能,解決數值、符號和圖形問題,添加其他微服務功能等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。

目錄大綱

目    錄

第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