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 サイトの他の関連記事を参照してください。