FastAPI에서 경로 매개변수는 동일하지만 서로 다른 여러 API 엔드포인트 정의 경로는 간단하지 않습니다. 엔드포인트 평가 순서가 중요하므로 요청의 특정 경로에 관계없이 먼저 정의된 엔드포인트가 항상 트리거됩니다.
다음 라우터 파일을 고려하세요. 세 개의 엔드포인트가 정의되어 있으며 각각 경로는 다르지만 "project_id" 경로 매개변수를 공유합니다.
</p> <h1>GET API 엔드포인트 1</h1> <p>@router.get("/project/{project_id}/{employee_id}")<br>async def method_one(project_id: str, organization_id: str, session: AsyncSession = 종속(get_db)):</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"># ...
@router.get("/project/details/{project_id}")
async def method_two(project_id: str, session: AsyncSession = 종속(get_db) )):
# ...
@router.get("/project/metadata/{project_id}")
async def method_two(project_id: str, session : AsyncSession = 종속(get_db)):
# ...
이 코드는 API 끝점 2와 3이 끝점 1에 정의된 컨트롤러 메서드(method_one)를 호출하는 예기치 않은 동작을 나타냅니다. ()).
FastAPI에서는 엔드포인트 평가가 순차적으로 발생합니다. 따라서 엔드포인트 1("/project/{project_id}/{employee_id}")이 먼저 평가됩니다. 엔드포인트 2 또는 엔드포인트 3에 대한 후속 요청이 이루어지면 FastAPI는 경로의 "/project/{project_id}" 부분을 엔드포인트 1의 project_id 매개변수로 해석합니다. 이로 인해 엔드포인트 1에 대한 컨트롤러 메서드가 호출됩니다.
이 문제를 해결하려면 동일한 경로 매개변수를 가진 엔드포인트가 추가 경로를 포함하는 엔드포인트보다 먼저 정의되도록 엔드포인트 정의 순서를 반대로 해야 합니다. 매개변수:
</p> <h1>GET API 엔드포인트 2</h1> <p>@router.get("/project/details/{project_id} ")</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"># ...
@router.get("/project/metadata/{project_id}")
# ...
@router.get("/project/{project_id}/{employee_id}")
# ...
이러한 수정을 통해 FastAPI는 엔드포인트 2와 3을 먼저 평가하여 해당 엔드포인트에 대한 요청이 있을 때 적절한 컨트롤러 메서드가 실행되는지 확인합니다.
위 내용은 FastAPI에서 동일한 경로 매개변수를 사용하여 여러 API 엔드포인트를 정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!