在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中文網其他相關文章!