web-dev-qa-db-ja.com

依存する関数/クラスを呼び出すだけの場合よりも、FastAPIでDependsを使用する利点は何ですか?

FastAPIは、独自の依存関係解決メカニズムを介して、DB接続などの依存関係を管理するための way を提供します。

pytestフィクスチャシステムに似ています。簡単に言うと、必要なものを関数のシグネチャで宣言すると、FastAPIは言及した関数(またはクラス)を呼び出し、ハンドラーが呼び出されたときに正しい結果を注入します。

はい、それはキャッシングを行います(単一ハンドラーの実行中に)が、@lru_cacheデコレーターだけを使用して同じことを実現し、実行ごとにこれらの依存関係を呼び出すことはできませんか?何か不足していますか?

2
Ojomio

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
2