FastAPI 中具有路径参数的多个 API 端点
在 FastAPI 中定义具有路径结构变化的多个 API 端点,同时共享路径参数可能会导致意外的行为。在提供的代码示例中,您遇到一个问题,即为所有 API 端点执行“method_one”控制器,无论其指定的路径如何。
了解路径匹配
在 FastAPI 中,端点定义的顺序至关重要。路径匹配是从应用程序中声明的第一个端点进行评估的。因此,“/project/{project_id}/{employee_id}”的端点首先被评估,并且所有其他端点的路径参数都被解释为 project_id 参数的一部分。
解决方案
要解决此问题,您需要确保具有更具体路径的端点在具有更通用路径的端点之前定义。这可确保 FastAPI 首先评估最具体的端点,并且路径参数按预期匹配。
更正后的代码示例将如下所示:
<code class="python"># GET API Endpoint 2 @router.get("/project/details/{project_id}") async def method_two( project_id: str, session: AsyncSession = Depends(get_db) ): # ... # GET API Endpoint 3 @router.get("/project/metadata/{project_id}") async def method_three( project_id: str, session: AsyncSession = Depends(get_db) ): # ... # GET API Endpoint 1 @router.get("/project/{project_id}/{employee_id}") async def method_one( project_id: str, employee_id: str, session: AsyncSession = Depends(get_db) ): # ...</code>
通过此调整,最具体的端点端点(/project/details/{project_id} 和 /project/metadata/{project_id})将在更通用的端点(/project/{project_id}/{employee_id})之前进行评估,确保执行正确的控制器方法每个 API 端点。
以上是为什么我的 FastAPI 端点“method_one”总是被执行,无论路径如何?的详细内容。更多信息请关注PHP中文网其他相关文章!