本書將向你詳細介紹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)本書還使用了以下兩個圖標:
表示警告或重要的注意事項。
表示提示信息或操作技巧。