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

Patricia Arquette
풀어 주다: 2024-10-30 17:08:02
원래의
408명이 탐색했습니다.

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

FastAPI에서 동일한 경로 매개변수로 여러 API 엔드포인트 정의

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"># ...
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

API 엔드포인트 2 가져오기

@router.get("/project/details/{project_id}")
async def method_two(project_id: str, session: AsyncSession = 종속(get_db) )):

# ...
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

API 엔드포인트 3 가져오기

@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"># ...
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

API 엔드포인트 3 가져오기

@router.get("/project/metadata/{project_id}")

# ...
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

API 엔드포인트 1 가져오기

@router.get("/project/{project_id}/{employee_id}")

# ...
로그인 후 복사
로그인 후 복사

이러한 수정을 통해 FastAPI는 엔드포인트 2와 3을 먼저 평가하여 해당 엔드포인트에 대한 요청이 있을 때 적절한 컨트롤러 메서드가 실행되는지 확인합니다.

위 내용은 FastAPI에서 동일한 경로 매개변수를 사용하여 여러 API 엔드포인트를 정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
이전 기사:`list.__iadd__`는 원래 목록과 할당된 목록을 모두 수정하는 반면 `list.__add__`는 할당된 목록만 수정하는 이유는 무엇입니까? 다음 기사:Python에서 고정 너비 파일 줄을 어떻게 효율적으로 구문 분석할 수 있나요?
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 이슈
관련 주제
더>
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!