首頁 >後端開發 >Python教學 >如何在 FastAPI 中有效記錄原始 HTTP 請求/回應 JSON 以便審核?

如何在 FastAPI 中有效記錄原始 HTTP 請求/回應 JSON 以便審核?

Linda Hamilton
Linda Hamilton原創
2024-12-20 20:20:11332瀏覽

How Can I Efficiently Log Raw HTTP Request/Response JSON in FastAPI for Auditing?

在Python FastAPI 中記錄特定路由的原始HTTP 請求/響應

問題:
我們正在開發使用FastAPI 的Web 服務將部署在Kubernetes 中。出於審計目的,我們需要記錄特定路由請求和回應的原始 JSON 正文。請求和回應 JSON 正文大小約為 1MB,日誌記錄過程不會顯著影響回應時間至關重要。

解決方案:

選項1:使用中間件

  1. 建立一個中間件:
    定義一個函數並使用@app.middleware("http")裝飾器來處理傳入請求和傳出回應。
  2. 捕獲請求正文:
    使用 request.body() 或 request.stream() 擷取請求正文。
  3. 處理回應正文:
    將回應正文當作位元組物件讀取,並向客戶端傳回自訂回應。
  4. 日誌資料:
    使用後台任務來記錄請求以及對檔案或資料庫的回應正文。

選項2:使用自訂APIRoute類別

  1. 定義自訂APIRoute:建立類別的自訂APIRoute 類,允許修改請求和回應正文。
  2. 處理請求正文:在自訂路由處理程序中,捕獲在請求正文到達端點處理程序之前。
  3. 處理回應正文:修改回應正文並建立新的 Response 物件。如果原始回應是 StreamingResponse,則會為流迭代器新增日誌記錄功能。
  4. 後台日誌記錄:將日誌記錄函數作為後台任務附加到回應物件。

注意:考慮請求和回應的大小體,因為大的有效負載可能會導致伺服器和客戶端的記憶體問題或延遲。可能有必要將日誌記錄限制為特定路由或從日誌記錄中排除流響應。

以上是如何在 FastAPI 中有效記錄原始 HTTP 請求/回應 JSON 以便審核?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn