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