ホームページ >バックエンド開発 >Python チュートリアル >同じパス パラメーターを持つ別のエンドポイントが後で定義されるときに、FastAPI エンドポイントが呼び出されるのはなぜですか?

同じパス パラメーターを持つ別のエンドポイントが後で定義されるときに、FastAPI エンドポイントが呼び出されるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 16:47:03661ブラウズ

Why is my FastAPI endpoint being called when a different endpoint with identical path parameters is defined later?

同一のパス パラメーターを持つ複数の API エンドポイント

FastAPI を使用して RESTful API を設計する場合、パスは異なるが共有される複数のエンドポイントを定義できます。パスパラメータ。ただし、エンドポイントの実行に一貫性がなくなる場合は、潜在的な構成の問題に対処することが重要です。

FastAPI で次のルーター ファイルを検討してください:

<code class="python"># GET API Endpoint 1
@router.get("/project/{project_id}/{employee_id}")
async def method_one(
    project_id: str, organization_id: str, session: AsyncSession = Depends(get_db)
):
    # Controller method execution

# GET API Endpoint 2
@router.get("/project/details/{project_id}")
async def method_two(
    project_id: str, session: AsyncSession = Depends(get_db)
):
    # Controller method execution

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

API エンドポイント 2 および 3 を呼び出すと、予期せず、 、method_one のコントローラーが、予期された method_two と Method_three の代わりに実行されます。この異常には、構成を注意深く調べる必要があります。

FastAPI は、定義された順序でエンドポイントを評価します。したがって、project/{project_id}/{employee_id} が最初に評価されます。その後、エンドポイント 2 および 3 へのリクエストはエンドポイント 1 をトリガーします。

解決策:

この問題を解決するには、ルーター ファイル内のエンドポイント定義を並べ替えて、次のことを確認します。エンドポイント 2 と 3 は、エンドポイント 1 のに定義されています:

<code class="python"># GET API Endpoint 2
@router.get("/project/details/{project_id}")
    # ...

# GET API Endpoint 3
@router.get("/project/metadata/{project_id}")
    # ...

# GET API Endpoint 1
@router.get("/project/{project_id}/{employee_id}")
    # ...</code>

エンドポイントの順序を変更することで、API エンドポイントの呼び出し時に適切なコントローラー メソッドが実行されます。

以上が同じパス パラメーターを持つ別のエンドポイントが後で定義されるときに、FastAPI エンドポイントが呼び出されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。