如何在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学习者快速成长!