1. 程式人生 > 其它 >FastAPI 學習之路(二十四)子依賴項

FastAPI 學習之路(二十四)子依賴項

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 不會為同一個請求多次呼叫同一個依賴項,而是把依賴項的返回值進行「快取」,並把它傳遞給同一請求中所有需要使用該返回值的「依賴項」。

其實依賴注入系統非常簡單。

依賴注入無非是與路徑操作函式一樣的函式罷了。

但它依然非常強大,能夠宣告任意巢狀深度的「圖」或樹狀的依賴結構。

文章首發在公眾號,歡迎關注。