首頁  >  文章  >  後端開發  >  當稍後定義具有相同路徑參數的不同端點時,為什麼會呼叫我的 FastAPI 端點?

當稍後定義具有相同路徑參數的不同端點時,為什麼會呼叫我的 FastAPI 端點?

Barbara Streisand
Barbara Streisand原創
2024-11-03 16:47:03553瀏覽

Why is my FastAPI endpoint being called when a different endpoint with identical path parameters is defined later?

具有相同路徑參數的多個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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn