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/에 대한 엔드포인트보다 더 구체적입니다. 세부정보/{프로젝트_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 중국어 웹사이트의 기타 관련 기사를 참조하세요!