首頁  >  文章  >  後端開發  >  如何在FastAPI中定義具有不同路徑和相同路徑參數的多個API端點?

如何在FastAPI中定義具有不同路徑和相同路徑參數的多個API端點?

Susan Sarandon
Susan Sarandon原創
2024-10-31 07:10:29809瀏覽

How to Define Multiple API Endpoints with Different Paths and the Same Path Parameter in FastAPI?

在FastAPI 中定義具有不同路徑和相同路徑參數的多個API 端點

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

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