ホームページ >バックエンド開発 >Python チュートリアル >FastAPI で異なるパスと同じパス パラメーターを持つ複数の API エンドポイントを定義する方法

FastAPI で異なるパスと同じパス パラメーターを持つ複数の API エンドポイントを定義する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-10-31 07:10:29881ブラウズ

How to Define Multiple API Endpoints with Different Paths and the Same Path Parameter in FastAPI?

FastAPI での異なるパスと同じパス パラメーターを持つ複数の API エンドポイントの定義

FastAPI で、異なるパスを持つ同じパス パラメーターを持つ複数の API エンドポイントを宣言すると、次のような問題が発生する可能性があります。予期しないルート マッチング動作。

次の例を考えてみましょう:

<code class="python"># GET API Endpoint 1
@router.get("/project/{project_id}/{employee_id}")
async def method_one(project_id: str, employee_id: str, ...):

    # ...

# GET API Endpoint 2
@router.get("/project/details/{project_id}")
async def method_two(project_id: str, ...):

    # ...

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

    # ...</code>

このシナリオでは、API エンドポイント 2 と 3 が呼び出されるときに、エンドポイント 1 で定義されたコントローラー メソッド、つまり method_one が実行されます。 ()。これは、FastAPI がエンドポイントを順番に評価する方法によるものです。

解決策

適切なルート マッチングを確保するには、パスの特異性の順序でエンドポイントを宣言する必要があります。エンドポイントは順番に評価されるため、より具体的なパスを持つエンドポイントを最初に宣言する必要があります。

上記の例では、/project/{project_id}/{employee_id} のエンドポイントは、/project/ のエンドポイントよりも具体的です。詳細/{project_id}。したがって、正しい宣言順序は次のとおりです。

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

    # ...

# GET API Endpoint 2
@router.get("/project/metadata/{project_id}")
async def method_three(project_id: str, ...):

    # ...

# GET API Endpoint 3
@router.get("/project/{project_id}/{employee_id}")
async def method_one(project_id: str, employee_id: str, ...):

    # ...</code>

この順序に従うと、エンドポイント 2 および 3 が呼び出されるときに、対応するメソッドメソッド method_two() および method_three() が意図したとおりに実行されます。

以上がFastAPI で異なるパスと同じパス パラメーターを持つ複数の API エンドポイントを定義する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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