在Python FastAPI 中記錄特定路由的原始HTTP 請求/響應
問題:
我們正在開發使用FastAPI 的Web 服務將部署在Kubernetes 中。出於審計目的,我們需要記錄特定路由請求和回應的原始 JSON 正文。請求和回應 JSON 正文大小約為 1MB,日誌記錄過程不會顯著影響回應時間至關重要。
解決方案:
選項1:使用中間件
-
建立一個中間件:
定義一個函數並使用@app.middleware("http")裝飾器來處理傳入請求和傳出回應。
-
捕獲請求正文:
使用 request.body() 或 request.stream() 擷取請求正文。
-
處理回應正文:
將回應正文當作位元組物件讀取,並向客戶端傳回自訂回應。
-
日誌資料:
使用後台任務來記錄請求以及對檔案或資料庫的回應正文。
選項2:使用自訂APIRoute類別
-
定義自訂APIRoute:建立類別的自訂APIRoute 類,允許修改請求和回應正文。
- 處理請求正文:在自訂路由處理程序中,捕獲在請求正文到達端點處理程序之前。
- 處理回應正文:修改回應正文並建立新的 Response 物件。如果原始回應是 StreamingResponse,則會為流迭代器新增日誌記錄功能。
- 後台日誌記錄:將日誌記錄函數作為後台任務附加到回應物件。
注意:考慮請求和回應的大小體,因為大的有效負載可能會導致伺服器和客戶端的記憶體問題或延遲。可能有必要將日誌記錄限制為特定路由或從日誌記錄中排除流響應。
以上是如何在 FastAPI 中有效記錄原始 HTTP 請求/回應 JSON 以便審核?的詳細內容。更多資訊請關注PHP中文網其他相關文章!