FastAPI エンドポイント「method_one」がパスに関係なく常に実行されるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-10-30 11:24:02
オリジナル
118 人が閲覧しました

Why is my FastAPI Endpoint `method_one` Always Being Executed, Regardless of Path?

FastAPI でパス パラメーターを使用した複数の API エンドポイント

パス パラメーターを共有しながら、パス構造にバリエーションを持たせて FastAPI で複数の API エンドポイントを定義すると、次のような問題が発生する可能性があります。予期せぬ動作。提供されているコード例では、指定されたパスに関係なく、すべての API エンドポイントに対して「method_one」コントローラーが実行されるという問題が発生しています。

パス マッチングについて

FastAPI では、エンドポイント定義の順序が重要です。パスの一致は、アプリで宣言された最初のエンドポイントから評価されます。したがって、「/project/{project_id}/{employee_id}」のエンドポイントが最初に評価され、他のすべてのエンドポイントのパス パラメーターは project_id パラメーターの一部として解釈されます。

ソリューション

この問題を解決するには、より一般的なパスを持つエンドポイントよりも前に、より具体的なパスを持つエンドポイントが定義されていることを確認する必要があります。これにより、FastAPI が最も具体的なエンドポイントを最初に評価し、パス パラメーターが期待どおりに一致するようになります。

修正されたコード例は次のようになります。

<code class="python"># GET API Endpoint 2
@router.get("/project/details/{project_id}")
async def method_two(
    project_id: str, session: AsyncSession = Depends(get_db)
):
    # ...

# GET API Endpoint 3
@router.get("/project/metadata/{project_id}")
async def method_three(
    project_id: str, session: AsyncSession = Depends(get_db)
):
    # ...

# GET API Endpoint 1
@router.get("/project/{project_id}/{employee_id}")
async def method_one(
    project_id: str, employee_id: str, session: AsyncSession = Depends(get_db)
):
    # ...</code>
ログイン後にコピー

この調整により、最も具体的なエンドポイントがエンドポイント (/project/details/{project_id} および /project/metadata/{project_id}) は、より汎用的なエンドポイント (/project/{project_id}/{employee_id}) より前に評価され、正しいコントローラー メソッドが確実に実行されます。各 API エンドポイント。

以上がFastAPI エンドポイント「method_one」がパスに関係なく常に実行されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!