"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Fastapi에서 다른 경로와 동일한 경로 매개 변수로 여러 API 엔드 포인트를 정의하는 방법은 무엇입니까?

Fastapi에서 다른 경로와 동일한 경로 매개 변수로 여러 API 엔드 포인트를 정의하는 방법은 무엇입니까?

2025-03-24에 게시되었습니다
검색:801

How to Define Multiple API Endpoints with Different Paths and the Same Path Parameter in FastAPI?

spostapi에서 다른 경로와 동일한 경로 매개 변수로 여러 API 엔드 포인트를 정의하면서

# 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, ...):

    # ...

는 다른 경로를 가진 여러 API 엔드 포인트를 선언하지만 동일한 경로 매개 변수는 예상치 못한 경로 일치 행동으로 이어질 수 있습니다.

다음과 같은 경로를 고려하십시오. 예 :

# API 엔드 포인트 1을 얻습니다 @router.get ( "/project/{project_id}/{Employee_id}") Async def method_one (project_id : str, Employee_id : str, ...) : # ... # API 엔드 포인트를 얻습니다 @router.get ( "/project/details/{project_id}") Async def method_two (project_id : str, ...) : # ... # API 엔드 포인트를 얻습니다 @router.get ( "/project/metadata/{project_id}") Async def method_three (project_id : str, ...) : # ...

이 시나리오에서 API 엔드 포인트 2와 3이 호출되면 엔드 포인트 1, 즉 메소드 _one ()에 정의 된 컨트롤러 메소드를 실행합니다. 이는 빠른 속도로 엔드 포인트를 순서대로 평가하는 데 기인합니다.

# 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, ...):

    # ...

적절한 경로 일치를 보장하려면 경로 특이성 순서대로 엔드 포인트를 선언해야합니다. 엔드 포인트가 순차적으로 평가되기 때문에보다 구체적인 경로를 가진 엔드 포인트는 먼저 선언되어야합니다.

How to Define Multiple API Endpoints with Different Paths and the Same Path Parameter in FastAPI? 
위의 예에서/project/{project_id}/{Employee_id}의 엔드 포인트는/project/details/{project_id}의 엔드 포인트보다 더 구체적입니다. 따라서 올바른 선언 순서는 다음과 같습니다.

# API 엔드 포인트 1 @router.get ( "/project/details/{project_id}") Async def method_two (project_id : str, ...) : # ... # API 엔드 포인트를 얻습니다 @router.get ( "/project/metadata/{project_id}") Async def method_three (project_id : str, ...) : # ... # API 엔드 포인트를 얻습니다 @router.get ( "/project/{project_id}/{Employee_id}") Async def method_one (project_id : str, Employee_id : str, ...) : # ...

이 순서에 따라 종료 2와 3이 호출되면 해당 메소드 메소드 _two () 및 method_three ()가 의도 한대로 실행됩니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3