ホームページ >バックエンド開発 >Python チュートリアル >同じパス パラメーターを持つ別のエンドポイントが後で定義されるときに、FastAPI エンドポイントが呼び出されるのはなぜですか?
同一のパス パラメーターを持つ複数の 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 サイトの他の関連記事を参照してください。