具有相同路徑參數的多個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_third。此異常需要仔細檢查配置。
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中文網其他相關文章!