FastAPIの依存関係注入システムを使用すると、再利用可能な依存関係(関数/クラス)を宣言でき、FastAPIがDepends()を介してパス操作に呼び出して注入します。データベースセッション、認証、共通パラメータなどの共有ロジックに使用され、コードをDRYで테스ト可能に保ちます。
基本的な依存関係
fastapi Depends
():
{: skip, : limit}
():
params
params = Depends(pagination)を宣言すると、FastAPIにpaginationを呼び出すよう指示し、(そのパラメータをリクエストから解決し)結果を関数に渡します。この依存関係は多くのエンドポイント全体で再利用可能です。
def get_db():
db = SessionLocal()
try:
yield db # provide the session to the endpoint
finally:
db.close() # cleanup runs AFTER the response — guaranteed
@app.get("/users")
def list_users(db = Depends(get_db)):
return db.query(User).all() # uses the injected, auto-closed session
yield依存関係はリソースを提供し、リクエスト後にティアダウンを実行します — データベースセッションの標準パターンです(前に開き、後に閉じ、自動的に)。
def get_current_user(token: str = Depends(get_token)): # depends on another dependency
return decode(token)
@app.get("/me")
def me(user: User = Depends(get_current_user)): # auth via injection
return user
依存関係はツリーを形成します — FastAPIは全チェーンを解決します。これが認証が通常実装される方法です(get_current_user依存関係)。
@app.get("/items", dependencies=[Depends(verify_api_key)]) # run a dependency without using its return
def items(): ... # e.g. enforce auth as a side effect
依存関係注入はFastAPIの最も強力で重要な機能の1つです — エンドポイント全体でロジックを綺麗に共有・再利用する方法です(データベースセッション、認証、一般的なクエリパラメータ、権限チェック)重複なく。
これを理解することは本質的です。コアパターンの基礎となるためです:yield依存関係はデータベースセッションを管理する標準的な方法です(各リクエスト後に保証されたクリーンアップ付き)、get_current_user依存関係は認証を実装するイディオマティックな方法です。
DIはまたコードを高度にテスト可能にします — テストでmockで依存関係をオーバーライドできます。
システムのエレガンス(依存関係はリクエストから独自のパラメータを解決し、他の依存関係に依存してツリーを形成でき、ドキュメントと統合される)これは実際のアプリケーションを構造化するための多目的なツールになります。したがって、Dependsをマスターすることは、整理されていて、保守可能で、テスト可能なFastAPIアプリを構築するための鍵です。