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