FastAPI Web 開發入門、進階與實戰

鐘遠曉

  • 出版商: 機械工業
  • 出版日期: 2023-10-01
  • 售價: $774
  • 貴賓價: 9.5$735
  • 語言: 簡體中文
  • 頁數: 508
  • 裝訂: 平裝
  • ISBN: 7111736486
  • ISBN-13: 9787111736486
  • 立即出貨 (庫存=1)

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

商品描述

這是一本從實戰角度介紹FastAPI web開發的入門與進階型技術書。
本書沒有過多的理論介紹,完全從第一線工作角度著手,介紹日常web開發需要掌握的相關知識。
本書共分為4篇16章:
第1篇是基礎篇,主要介紹FastAPI的基礎知識,包括FastAPI的基本資訊、安裝使用、常規作業、中介軟體、資料庫相關內容。
作為初學者,掌握這部分內容就可以快速上手使用FastAPI,處理各種日常問題。
第二篇是進階篇,主要圍繞在與FastAPI相關的高階技能展開,包括異常處理、功能擴充、安全認證、效能、測試等相關內容。
第三篇是實戰篇,主要從案例的角度對FastAPI在典型應用場景中的落地進行分享,
包括短鏈應用、websocket、基於公眾號的掛號系統等應用場景。
第四篇是部署篇,這部分重點在於如何實現FastAPI的自動化部署,這資料高階人員技能。
本篇提供了三種自動化部署方式。

目錄大綱

目錄 Contents
前言
第1章 初識FastAPI1
1.1 FastAPI架構概述1
1.1.1 FastAPI與其他Web架構2
1.1.2 FastAPI的特性2
1.2 非同步程式設計基礎4
1.2.1 並發程式設計機制4
1.2.2 並發與並行5
1.2.3 同步與非同步6
1.2.4 阻塞與非阻塞6
1.3 asyncio協程概念7
1.4 asyncio協程簡單應用8
第2章 初試FastAPI11
2.1 建置開發環境11
2.1.1 安裝Python語言套件11
2.1.2 PyCharm的安裝14
2.1.3 PyCharm IDE配置解析器15
2.1.4 PyCharm IDE解析器的切換18
2.1.5 PIP安裝來源的設定19
2.2 新建FastAPI專案22
2.2.1 新建簡單專案22
2.2.2 專案依賴庫的安裝24
2.3 簡單項目介紹27
2.3.1 建立app實例物件27
2.3.2 新增API請求路由註冊28
2.3.3 新增後端渲染模板路由29
2.3.4 啟動服務運作30
2.3.5 uvicorn參數說明34
2.3.6 查看互動式API文件35
第3章 FastAPI基礎入門38
3.1 app應用程式設定參數詳解38
3.1.1 開啟Debug模式39
3.1.2 關於API互動文件參數40
3.1.3 關閉互動式文件存取42
3.1.4 全域routes參數說明42
3.1.5 全域異常/錯誤擷取43
3.2 API端點路由註冊與匹配44
3.2.1 路由節點元資料44
3.2.2 路由URL匹配46
3.2.3 基於APIRouter實例的 路由註冊48
3.3 同步和非同步API端點路由50
3.3.1 同步API端點路由50
3.3.2 異步API端點路由51
3.4 多應用掛載51
3.4.1 主從應用掛載52
3.4.2 掛載其他WSGI應用52
3.5 自訂配置swagger_ui53
3.6 應用程式設定資訊讀取55
3.6.1 基於檔案讀取設定參數55
3.6.2 基於Pydantic和.env環境變數讀取配置參數56
3.6.3 給配置讀取加上快取58
3.7 API端點路由函數參數58
3.7.1 路徑操作及路徑函數59
3.7.2 Path參數59
3.7.3 Query參數63
3.7.4 Body參數67
3.7.5 Form資料和文件處理77
3.7.6 Header參數81
3.7.7 Cookie參數設定與讀取83
3.8 請求報文85
3.8.1 Request物件85
3.8.2 更多Request屬性資訊86
3.9 響應報文87
3.9.1 HTTP狀態碼分類88
3.9.2 指定HTTP狀態碼89
3.9.3 使用response_model定義回應封包內容90
3.9.4 Response類型93
3.9.5 自訂Response類型98
3.10 後台非同步任務執行99
3.11 應用程式啟動和關閉事件100
第4章 FastAPI異常及錯誤102
4.1 HTTPException異常103
4.1.1 HTTPException簡單原始碼分析103
4.1.2 HTTPException的使用104
4.1.3 覆蓋HTTPException異常處理105
4.2 RequestValidationError錯誤106
4.2.1 RequestValidationError的使用106
4.2.2 覆蓋RequestValidationError錯誤處理107
4.3 自訂異常108
4.3.1 自訂異常的實作108
4.3.2 自訂內部錯誤碼和異常109
4.4 中間件拋出自定義異常110
第5章 Pydantic資料模型管理113
5.1 Pydantic介紹113
5.2 Pydantic的使用114
5.2.1 模型常見資料類型114
5.2.2 模型參數必選和可選115
5.2.3 模型多層嵌套116
5.2.4 模型物件實例化116
5.2.5 模型物件的轉換117
5.2.6 模型物件的複製118
5.2.7 異常訊息的捕獲119
5.2.8 用Field()函數擴展更多複雜驗證120
5.2.9 自訂驗證器123
5.2.10 自訂驗證器的優先權124
5.2.11 多字段或模型共享校驗器125
5.2.12 root_validator根驗證器126
5.3 Pydantic在FastAPI的應用127
5.3.1 模型類別和Body的請求127
5.3.2 模型類別與依賴注入關係128
5.3.3 模型Config類別和ORM轉換130
第6章 FastAPI依賴注入機制詳解133
6.1 依賴注入框架134
6.2 依賴項及其聲明方式139
6.2.1 函數式依賴項140
6.2.2 類方式依賴項142
6.2.3 多個依賴項注入與相依性傳參143
6.3 多層依賴項嵌套注入144
6.4 多個依賴物件注入146
6.5 不同位置上的依賴項146
6.5.1 全域依賴項的注入147
6.5.2 路徑操作依賴項的注入148
6.5.3 路由分組依賴項的注入149
第7章 FastAPI中間件151
7.1 HTTP請求中間件151
7.2 @app.middleware裝飾器中介軟體152
7.3 CORSMiddleware跨域中間件155
7.3.1 跨域中間件的使用156
7.3.2 跨域中間件源碼分析157
7.4 其他中間件161
7.4.1  HTTPSRedirectMiddleware中間件161
7.4.2 TrustedHostMiddleware中間件162
7.5 自訂中間件164
7.5.1 基於BaseHTTPMiddleware自訂中間件164
7.5.2 日誌追蹤鏈路ID165
7.5.3 IP白名單中間件167
7.5.4 基於中間件獲取響應報文內容168
第8章 資料庫的應用170
8.1 資料庫基礎170
8.1.1 SQL概述170
8.1.2 SQL資料庫170
8.1.3 NoSQL資料庫171
8.2 Python操作SQLite資料庫171
8.2.1 建立並連結到資料庫172
8.2.2 遊標物件操作資料172
8.3 ORM操作資料庫173
8.4 SQLAlchemy函式庫174
8.4.1 資料驅動非同步與同步說明174
8.4.2 SQLAlchemy同步使用方式175
8.4.3 SQLAlchemy非同步使用方式179
8.4.4 SQLAlchemy ORM反向生成模型184
8.5 SQLModel函式庫185
8.5.1 SQLModel同步使用方式186
8.5.2 SQLModel非同步使用方式188
8.6 在FastAPI中整合非同步SQLAlchemy處理190
8.6.1 需求分析與結構規劃190
8.6.2 應用程式設定資訊讀取191
8.6.3 配置資料庫引擎191
8.6.4 使用yield管理會話依賴項192
8.6.5 定義表模型192
8.6.6 表模型CRUD封裝193
8.6.7 建立FastAPI實例並完成表格建立194
8.6.8 定義對外可見的API195
8.6.9 完善對外可見的API195
8.6.10 Alembic資料庫版本管理199
8.7 Redis資料庫及aioredis使用201
8.7.1 連接Redis資料庫202
8.7.2 Redis客戶端物件實例化202
8.7.3 Redis基本快取的應用203
8.7.4 Redis發布訂閱的應用程式206
8.7.5 Redis分散式鎖的應用208
第9章 安全認證機制211
9.1 OpenAPI規範211
9.2 基於標準HTTP的身份驗證方案213
9.2.1 HTTPBasic基本認證方案213
9.2.2 HTTPDigest摘要認證方案215
9.3 基於APIKey的特定密鑰方案221
9.4 基於OAuth 2的授權機制頒發令牌方案225
9.4.1 JWT組成結構225
9.4.2 JWT應用實務227
9.4.3 OAuth 2參數說明228
9.4.4 OAuth 2主體角色230
9.4.5 客戶端模式230
9.4.6 密碼模式237
9.4.7 授權碼模式243
9.4.8 簡化模式253
第10章 短鏈應用實戰254
10.1 應用開發背景254
10.2 應用系統功能需求描述255
10.3 專案程式碼編寫256
10.3.1 專案規劃256
10.3.2 應用程式設定資訊讀取257
10.3.3 配置資料庫引擎257
10.3.4 使用yield管理會話依賴項257
10.3.5 定義表模型258
10.3.6 用戶資訊表CURD封裝259
10.3.7 短鏈資訊表CURD封裝260
10.3.8 建立FastAPI實例並初始化表261
10.3.9 建立測試帳號262
10.3.10 定義短鏈重定向介面262
10.3.11 定義短鏈生成介面263
10.3.12 將子路由新增至根路由並啟動服務267
第11章 WebSocket Vue簡易聊天室實戰269
11.1 WebSocket簡介269
11.2 專案系統描述270
11.3 專案程式碼編寫271
11.3.1 專案代碼結構271
11.3.2 前端頁面開發272
11.3.3 後端開發280
11.3.4 跨進程WebSocket通訊290
第12章 預約掛號系統實戰298
12.1 應用開發背景及系統功能需求299
12.2 專案架構規劃300
12.3 使用路由分組模組化程式301
12.3.1 APIRouter參數說明302
12.3.2 APIRouter路由分組建立303
12.3.3 視圖函數綁定303
12.3.4 APIRouter路由分組註冊304
12.4 資料表模型設計304
12.4.1 資料庫安裝304
12.4.2 資料表設計308
12.4.3 模型類別逆向生成310
12.4.4 資料庫引擎配置313
12.5 後端專案基礎架構建置315
12.5.1 資料庫配置315
12.5.2 客製化統一API內容規範317
12.5.3 客製化全域異常/錯誤處理320
12.5.4 基於中間件日誌記錄322
12.6 關鍵業務API實現334
12.6.1 微信登入授權334
12.6.2 取得首頁醫院資訊337
12.6.3 取得醫師清單資訊340
12.6.4 取得醫師排班資訊341
12.6.5 取得排班資訊詳情345
12.6.6 訂單提交並支付346
12.6.7 未支付訂單再支付353
12.6.8 微信支付回檔357
12.6.9 歷史預約詳情清單介面361
12.6.10 其他業務介面說明361
12.7 超時訂單處理362
12.7.1 訊息佇列說明362
12.7.2 AMQP介紹362
12.7.3 本地安裝RabbitMQ364
12.7.4 RabbitMQ簡單應用369
12.7.5 RabbitMQ死信隊列371
12.7.6 訂單逾時後自動取消的實現373
12.8 同步轉異步處理382
12.8.1 asgiref轉換庫介紹383
12.8.2 asgiref轉換庫應用383
第13章 基於Pytest的API測試385
13.1 Pytest簡單應用385
13.1.1 unittest和Pytest的比較386
13.1.2 pytest.fixture裝飾器的使用390
13.1.3 測試設定檔conftest.py395
13.2 用FastAPI進行API單元測試397
13.2.1 基於TestClient的單元測試397
13.2.2 基於Httpx的非同步單元測試398
第14章 生產環境部署詳解405
14.1 Linux伺服器下部署應用程式405
14.1.1 分配具有root權限的普通使用者406
14.1.2 Linux系統上安裝Python 3406
14.1.3 基於pyenv管理Python版本407
14.1.4 基於pipenv管理虛擬環境410
14.1.5 產生依賴項設定檔412
14.1.6 基於Gunicorn Uvicorn的服務部署414
14.1.7 基於Supervisor的服務進程管理416
14.1.8 基於OpenResty的反向代理419
14.1.9 PostgreSQL資料庫的安裝423
14.2 基於SVN自動化部署425
14.3 基於Docker進行服務部署427
14.3.1 Docker的安裝和常用命令428
14.3.2 基於Dockerfile建置映像430
14.3.3 Docker容器化部署與運作432
14.4 Docker下的環境變數433
14.4.1 基於OS標準庫433
14.4.2 基於Pydantic中的BaseSettings自動綁定並解析環境變數434
14.4.3 Docker下的環境變數讀取434
14.5 基於Docker Compose進行服務編排436
14.5.1 多服務容器獨立運作部署436
14.5.2 多Docker容器一鍵編排部署437
14.6 基於Gogs Drone進行永續整合441
14.6.1 透過Gogs搭建自助Git服務441
14.6.2 透過Drone搭建持續整合和持續交付444
第15章 FastAPI實戰常見問題454
15.1 依賴注入項的傳參454
15.2 自訂插件開發456
15.2.1 插件模板基類的定義456
15.2.2 實作類似Flask鉤子事件插件457
15.3 body重複消費引發阻塞問題460
15.3.1 阻塞問題重現460
15.3.2 解決方案462
15.4 全域request變數465
15.5 同步與非同步相互轉換467
15.5.1 asgiref轉換包467
15.5.2 asyncer轉換包469
15.6 Model回應報文的排序470
15.7 同步和非同步郵件發送471
15.7.1 同步方式472
15.7.2 異步方式474
15.8 基於Jaeger實現分散式鏈路追蹤476
15.8.1 分散式連結追蹤的簡單定義476
15.8.2 OpenTracing資料模型477
15.8.3 Jaeger介紹478
15.8.4 Jaeger安裝與應用479
15.8.5 基於Jaeger SDK實現鏈路追蹤480
15.8.6 FastAPI整合Jaeger SDK482
15.8.7 基於Jaeger SDK的跨服務鏈路統計486
15.9 基於Sentry實現錯誤訊息收集489
15.9.1 Sentry安裝與設定489
15.9.2 FastAPI架構中引進Sentry492