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

Susan Sarandon
發布: 2024-10-31 07:10:29
原創
808 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!