FastAPIは、独自の依存関係解決メカニズムを介して、DB接続などの依存関係を管理するための way を提供します。
pytest
フィクスチャシステムに似ています。簡単に言うと、必要なものを関数のシグネチャで宣言すると、FastAPIは言及した関数(またはクラス)を呼び出し、ハンドラーが呼び出されたときに正しい結果を注入します。
はい、それはキャッシングを行います(単一ハンドラーの実行中に)が、@lru_cache
デコレーターだけを使用して同じことを実現し、実行ごとにこれらの依存関係を呼び出すことはできませんか?何か不足していますか?
FastAPIは、リクエストから依存関係にパラメーターを挿入し、OpenApi仕様に含めます。
これにより、パラメーターを再利用できるようになり、特にプロジェクトが大きくなった場合に、少ないコードで書くことができます。
依存関係の注入がないと、すべてのルートで毎回パラメーターを指定する必要があります。
FastAPI docs のこの例では、共有されている共通の検索パラメーターがあります。
async def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
return commons
@app.get("/users/")
async def read_users(commons: dict = Depends(common_parameters)):
return commons