fastapi 查詢參數列表的逗號分隔處理
在使用FastAPI構建API時,經常需要處理多個查詢參數的情況,例如用戶可選擇多個選項。本文探討如何處理FastAPI中列表形式的查詢參數,使其在URL中以逗號分隔的形式呈現,而非多個同名鍵值對。
問題:
FastAPI的query參數默認情況下,若參數接受列表類型,用戶傳遞多個相同參數,URL中會顯示多個同名參數,例如source=manual&source=vdna。我們期望將這些參數以逗號分隔的形式呈現,例如source=manual,vdna。
解決方案:
http參數規范允許一個參數多次出現并被解析為列表,FastAPI的默認行為符合規范。如需自定義參數解析,需自行處理。主要方法如下:
方法一:修改參數類型為字符串,自行解析
將query參數類型聲明為str,在函數內部使用split()函數解析逗號分隔的字符串。例如,將source參數類型改為Optional[str],并在函數中使用以下代碼:
source: Optional[str] = Query(None, description="請用`,`分割多個參數,如`Manual,vDNA,text-match`") # ... parsed_source = source.split(",") if source else [] # ...
此方法簡單直接,易于理解和實現。
方法二:自定義依賴項進行解析和驗證
此方法更靈活,可實現更復雜的解析邏輯和驗證規則。通過自定義依賴項處理查詢參數,并按需解析。本文為避免URL地址,不再贅述具體實現細節,可參考相關issue和文檔。此方法適用于需要復雜邏輯或自定義驗證規則的情況。
通過以上兩種方法,可有效解決FastAPI中列表類型查詢參數的逗號分隔問題,使API接口更簡潔易用。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END