>  기사  >  백엔드 개발  >  경로에 관계없이 FastAPI 엔드포인트 'method_one'이 항상 실행되는 이유는 무엇입니까?

경로에 관계없이 FastAPI 엔드포인트 'method_one'이 항상 실행되는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-30 11:24:02104검색

Why is my FastAPI Endpoint `method_one` Always Being Executed, Regardless of Path?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.