url: /posts/2d992ef9e8962dc0a4a0b5348d486114/
title: 如何在 FastAPI 中巧妙覆蓋依賴注入并攔截第三方服務調用?
date: 2025-09-06T03:34:14+08:00
lastmod: 2025-09-06T03:34:14+08:00
author: cmdragon
summary:
FastAPI 的依賴注入系統允許解耦復雜依賴關系,便于代碼重用。在測試中,可通過 dependencies_overrides
覆蓋真實依賴,避免影響實際服務。多層依賴覆蓋時,需特別注意共享資源(如數據庫連接)的處理。對于第三方服務調用,可使用自定義 HTTP 客戶端攔截器實現請求攔截、模擬和降級處理,確保在服務異常時返回降級數據。常見報錯如 422 Unprocessable Entity
和 500 Internal Server Error
可通過模型驗證和異常處理解決,而 TimeoutError
則可通過設置超時和重試機制預防。
categories:
- fastapi
tags:
- FastAPI
- 依賴注入
- 單元測試
- 請求攔截
- 第三方服務調用
- 錯誤處理
- 模擬與覆蓋

掃描二維碼關注或者微信搜一搜:編程智域 前端至全棧交流與成長
發現1000+提升效率與開發的AI工具和實用程序:https://tools.cmdragon.cn/
1. 依賴注入系統模擬與覆蓋
1.1 依賴注入的核心概念
FastAPI 的依賴注入系統是其核心特性之一,它允許你將復雜依賴關系解耦并重用代碼。例如數據庫連接、授權驗證等場景:
# 示例:基本依賴注入
from fastapi import Depends, FastAPIapp = FastAPI()async def common_params(limit: int = 100, offset: int = 0):return {"limit": limit, "offset": offset}@app.get("/items/")
async def read_items(params: dict = Depends(common_params)):return {"params": params}
1.2 測試場景中的覆蓋技術
在單元測試中,需要覆蓋真實依賴(如數據庫連接),避免對實際服務產生影響。使用 FastAPI 的 dependencies_overrides
:
# 測試覆蓋真實數據庫的示例
from fastapi.testclient import TestClient
from .main import app, get_db # 原始依賴client = TestClient(app)# 創建虛假的數據庫依賴
async def fake_db():return MockDatabase()# 覆蓋原始依賴
app.dependency_overrides[get_db] = fake_dbdef test_read_items():response = client.get("/items")assert response.status_code == 200