FastAPI 中定義接口函數參數,包含請求體參數、查詢參數、依賴注入參數的組合。
? 示例結構
async def chat(request: Request,data: ChatData,conversation_id: Optional[str] = Query(None),current_user: User = Depends(get_current_user),
):
這表示你定義了一個 異步(async) 的 HTTP 接口函數 chat
,它會自動被 FastAPI 接收到請求時調用。
1?? request: Request
? 作用:
- 表示接收到的原始 HTTP 請求對象。
- 你可以通過
request
拿到請求頭、IP、路徑、cookie 等。
🧠 舉例:
ip = request.client.host # 獲取用戶 IP 地址
ua = request.headers.get("user-agent") # 獲取瀏覽器信息
2?? data: ChatData
? 作用:
- 從請求體中自動解析并驗證一個 JSON 數據,轉換為
ChatData
類型(你自定義的 Pydantic 模型)。
🔥 FastAPI 會自動:
- 檢查字段類型是否匹配。
- 自動報錯 + 返回 HTTP 422,如果數據格式不對。
🧠 舉例:
你傳 JSON 請求體:
{"messages": [{"role": "user", "content": "今天天氣怎么樣?"}],"data": {"doc_ids": ["doc1"]}
}
FastAPI 會自動轉換為:
data.messages[0].content == "今天天氣怎么樣?"
data.data["doc_ids"] == ["doc1"]
3?? conversation_id: Optional[str] = Query(None)
? 作用:
- 表示這個參數是從查詢參數(URL 的 ? 后面)中讀取的。
- 類型是可選字符串,如果沒傳就默認為
None
。
🔥 舉例:
你訪問的是:
POST /chat?conversation_id=abc123
那么:
conversation_id == "abc123"
如果沒有 ?conversation_id=...
,那就是 None
。
4?? current_user: User = Depends(get_current_user)
? 作用:
- 這是 FastAPI 的 依賴注入機制(Depends)。
- 表示調用你定義好的函數
get_current_user()
來獲取當前用戶身份。 - 返回值會自動賦值給
current_user
,類型為User
。
🔥 舉例:
你的 get_current_user()
方法會根據請求的 token 驗證并返回用戶對象,如:
def get_current_user():return User(id="u123", username="張三")
那么你可以直接用:
print(current_user.username) # 張三
📌 總結表格
參數名 | 來源 | 類型 | 默認值 | 作用 |
---|---|---|---|---|
request | 自動注入 | FastAPI 的 Request 類型 | 無 | 獲取請求頭、路徑、客戶端信息等 |
data | 請求體 JSON | ChatData Pydantic 模型 | 無 | 解析用戶請求數據,自動驗證字段類型 |
conversation_id | 查詢參數 ?conversation_id=xxx | Optional[str] | None | 標識多輪對話 ID |
current_user | 依賴注入 Depends | User(你定義的用戶模型) | 由函數返回 | 自動獲取當前用戶身份信息 |
🌰 綜合調用舉例:
你發起一個請求:
POST /chat?conversation_id=abc123
Content-Type: application/json
Authorization: Bearer <你的token>{"messages": [{"role": "user", "content": "幫我總結一下這段文章"}],"data": {"doc_ids": ["doc1", "doc2"]}
}
后臺就會自動執行:
- 調用
get_current_user()
把你 token 解析成用戶對象 - 把 JSON 轉為
ChatData
對象 - 把
conversation_id
解析出來變成參數