동일한 경로 매개변수를 사용하는 여러 API 엔드포인트
FastAPI를 사용하여 RESTful API를 설계할 때 경로는 다르지만 공유되는 여러 엔드포인트를 정의할 수 있습니다. 경로 매개변수. 그러나 엔드포인트 실행이 일관되지 않게 되는 경우 잠재적인 구성 문제를 해결하는 것이 중요합니다.
FastAPI에서 다음 라우터 파일을 고려하세요.
<code class="python"># 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) ): # Controller method execution # GET API Endpoint 2 @router.get("/project/details/{project_id}") async def method_two( project_id: str, session: AsyncSession = Depends(get_db) ): # Controller method execution # GET API Endpoint 3 @router.get("/project/metadata/{project_id}") async def method_three( project_id: str, session: AsyncSession = Depends(get_db) ): # Controller method execution</code>
예기치 않게 API 엔드포인트 2와 3을 호출할 때 , 예상되는 method_two 및 method_3 대신 method_one의 컨트롤러가 실행됩니다. 이 예외 현상은 구성을 주의 깊게 조사해야 합니다.
FastAPI는 정의된 순서대로 엔드포인트를 평가합니다. 따라서 project/{project_id}/{employee_id}가 먼저 평가됩니다. 이후 엔드포인트 2와 3에 대한 모든 요청은 엔드포인트 1을 트리거합니다.
해결책:
이 문제를 해결하려면 라우터 파일에서 엔드포인트 정의를 다시 정렬하여 다음을 확인하세요. 엔드포인트 2와 3은 엔드포인트 1:
<code class="python"># GET API Endpoint 2 @router.get("/project/details/{project_id}") # ... # GET API Endpoint 3 @router.get("/project/metadata/{project_id}") # ... # GET API Endpoint 1 @router.get("/project/{project_id}/{employee_id}") # ...</code>
정의됩니다.
엔드포인트를 다시 정렬하면 API 엔드포인트 호출 시 적절한 컨트롤러 메서드가 실행됩니다.위 내용은 나중에 동일한 경로 매개변수를 가진 다른 엔드포인트가 정의될 때 내 FastAPI 엔드포인트가 호출되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!