ホームページ  >  記事  >  バックエンド開発  >  FastAPI で同じパス パラメーターを使用して複数の API エンドポイントを定義するにはどうすればよいですか?

FastAPI で同じパス パラメーターを使用して複数の API エンドポイントを定義するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 17:08:02418ブラウズ

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

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

FastAPI で、同じパス パラメータで異なる複数の API エンドポイントを定義する道は単純ではありません。エンドポイント評価の順序が重要であるため、リクエストの特定のパスに関係なく、最初に定義されたエンドポイントが常にトリガーされます。

問題

次のルーター ファイルについて考えてみましょう。ここで 3 つのエンドポイントが定義されており、それぞれ異なるパスを持ちますが、「project_id」パス パラメーターを共有しています:

</p>
<h1>GET API Endpoint 1</h1>
<p>@router.get("/project/{project_id}/{employee_id}")<br>async def method_one(project_id: str,organization_id: str, session: AsyncSession = depends(get_db)):</p> <pre class="brush:php;toolbar:false"># ...

GET API エンドポイント 2

@router.get("/project/details/{project_id}")
async def method_two(project_id: str, session: AsyncSession = depends(get_db) )):

# ...

GET API エンドポイント 3

@router.get("/project/metadata/{project_id}")
async def method_three(project_id: str, session : AsyncSession = depends(get_db)):

# ...

このコードは、API エンドポイント 2 および 3 がエンドポイント 1 で定義されたコントローラー メソッド (method_one) を呼び出すときに予期しない動作を示します。 ()).

Reason

FastAPI では、エンドポイントの評価は順番に行われます。したがって、エンドポイント 1 (「/project/{project_id}/{employee_id}」) が最初に評価されます。後続のリクエストがエンドポイント 2 またはエンドポイント 3 に対して行われると、FastAPI はパスの「/project/{project_id}」部分をエンドポイント 1 の project_id パラメーターとして解釈します。これにより、エンドポイント 1 のコントローラー メソッドが呼び出されます。

解決策

この問題を解決するには、エンドポイント定義の順序を逆にして、同じパス パラメーターを持つエンドポイントが追加のパスを含むエンドポイントの前に定義されるようにする必要があります。パラメータ:

</p>
<h1>GET API エンドポイント 2</h1>
<p>@router.get("/project/details/{project_id} ")</p>
<pre class="brush:php;toolbar:false"># ...

GET API エンドポイント 3

@router.get("/project/metadata/{project_id}")

# ...

GET API エンドポイント 1

@router.get("/project/{project_id}/{employee_id}")

# ...

この変更を行うことで、FastAPIは最初にエンドポイント 2 と 3 を評価し、それらのエンドポイントにリクエストが行われたときに適切なコントローラー メソッドが実行されるようにします。

以上がFastAPI で同じパス パラメーターを使用して複数の API エンドポイントを定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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