FastAPI 學習之路(二十四)子依賴項
阿新 • • 發佈:2021-10-18
FastAPI 支援建立含子依賴項的依賴項。並且,可以按需宣告任意深度的子依賴項巢狀層級。
FastAPI負責處理解析不同深度的子依賴項。
我們去實現一個簡單的demo
from fastapi import Depends, FastAPI from typing import Optional app = FastAPI() fake_items_db = [{"city": "beijing"}, {"city": "shanghai"}, {"city": "heze"}] def query_extractor(desc: Optional[str] = None):return desc def query__extractor( desc: str = Depends(query_extractor), name: Optional[str]="" , ): if not desc: return name return desc @app.get("/items/") def read_items(query__extractor: str = Depends(query__extractor)): return query__extractor
我們去看下介面請求
我們可以看到,我們實現的子依賴是成功的。
-
儘管該函式自身是依賴項,但還聲明瞭另一個依賴項(它「依賴」於其他物件)
-
該函式依賴query_extractor, 並把query_extractor
的返回值賦給引數desc
-
同時,該函式還聲明瞭型別是str的可選name
使用者未提供desc時,則使用name
多次使用同一個依賴項
-
如果在同一個路徑操作多次聲明瞭同一個依賴項,例如,多個依賴項共用一個子依賴項,FastAPI在處理同一請求時,只調用一次該子依賴項。
-
FastAPI 不會為同一個請求多次呼叫同一個依賴項,而是把依賴項的返回值進行「快取」,並把它傳遞給同一請求中所有需要使用該返回值的「依賴項」。
其實依賴注入系統非常簡單。
依賴注入無非是與路徑操作函式一樣的函式罷了。
但它依然非常強大,能夠宣告任意巢狀深度的「圖」或樹狀的依賴結構。
文章首發在公眾號,歡迎關注。