预购商品
书目分类
特别推荐
這是一本從實戰角度介紹FastAPI web開發的入門與進階型技術書。本書沒有過多的理論介紹,接近從一線工作角度入手,介紹日常web開發需要掌握的相關知識。 本書共分為4篇16章: 第一篇是基礎篇,主要介紹FastAPI的基礎知識,包括FastAPI的基本資訊、安裝使用、常規操作、中介軟體、資料庫相關內容。作為初學者,掌握這部分內容就可以快速上手使用FastAPI,處理各種日常問題。 第二篇是進階篇,主要圍繞與FastAPI相關的高級技能展開,包括異常處理、功能擴展、安全認證、性能、測試等相關內容。 第三篇是實戰篇,主要從案例的角度對FastAPI在典型應用場景中的落地進行分享,包括短鏈應用、websocket、基於公眾號的掛號系統等應用場景。 第四篇是部署篇,這部分重點介紹如何實現FastAPI的自動化部署,這資料高階人員推薦技能。本篇提供了三種自動化部署方式。
前言 第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 ……
最近浏览商品
客服公告
热门活动
订阅电子报