当稍后定义具有相同路径参数的不同端点时,为什么会调用我的 FastAPI 端点?

Barbara Streisand
发布: 2024-11-03 16:47:03
原创
552 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!