具有相同路径参数的多个 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>
以上是当稍后定义具有相同路径参数的不同端点时,为什么会调用我的 FastAPI 端点?的详细内容。更多信息请关注PHP中文网其他相关文章!