![](/img/trans.png)
[英]How to call an API from a different API in the same app in FastAPI?
[英]How to define multiple API endpoints in FastAPI with different paths but the same path parameter?
我正在開發一個使用 FastAPI 的項目。 我的路由器文件如下所示:
# 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)
):
try:
return await CustomController.method_one(
session, project_id, employee_id
)
except Exception as e:
return custom_exception_handler(e)
# GET API Endpoint 2
@router.get("/project/details/{project_id}")
async def method_two(
project_id: str, session: AsyncSession = Depends(get_db)
):
try:
return await CustomController.method_two(
session=session, project_id=project_id
)
except Exception as e:
return custom_exception_handler(e)
# GET API Endpoint 3
@router.get("/project/metadata/{project_id}")
async def method_three(
project_id: str, session: AsyncSession = Depends(get_db)
):
try:
return await CustomController.method_three(
session=session, project_id=project_id
)
except Exception as e:
return custom_exception_handler(e)
此處工作流的明顯期望是:當這些 API 端點中的每一個都被其所需的路徑參數觸發時,將執行 controller 方法,如其主體中所定義。
然而,由於一些奇怪的原因,當 API 端點 2 和 3 被觸發時,它們正在執行端點 1 中的 controller 方法,即CustomController.method_one()
。
在路由器的方法method_one()
中添加一些print()
語句后,我觀察到在調用method_one()
端點 2 時調用了 method_one(),而它實際上應該在路由器中調用method_two()
。 API 端點 3 的情況也是如此。
當觸發 API 端點 2 和 3 時,我無法理解為什么要執行method_one()
的方法體。 我是不是在配置上遺漏了什么,或者什么——有人可以糾正我嗎? 謝謝!
在 FastAPI 中,如這個答案中所述,因為端點是按順序評估的(請參閱 FastAPI 關於順序的重要性),它確保您首先在應用程序中定義的端點 - 在這種情況下,即/project/{project_id}/...
— 將首先進行評估。 因此,每次調用其他兩個端點之一(即/project/details/...
和/project/metadata/...
)時,都會觸發第一個端點,使用details
或metadata
作為project_id
參數。
因此,您需要確保其他兩個端點在/project/{project_id}/...
之前聲明。 例如:
# GET API Endpoint 1
@router.get("/project/details/{project_id}")
# ...
# GET API Endpoint 2
@router.get("/project/metadata/{project_id}")
# ...
# GET API Endpoint 3
@router.get("/project/{project_id}/{employee_id}")
# ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.