Heim  >  Artikel  >  Backend-Entwicklung  >  Wie definiere ich mehrere API-Endpunkte mit demselben Pfadparameter in FastAPI?

Wie definiere ich mehrere API-Endpunkte mit demselben Pfadparameter in FastAPI?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-30 17:08:02410Durchsuche

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

Definieren mehrerer API-Endpunkte mit demselben Pfadparameter in FastAPI

In FastAPI definieren Sie mehrere API-Endpunkte mit demselben Pfadparameter, aber unterschiedlich Wege sind nicht einfach. Da die Reihenfolge der Endpunktauswertung wichtig ist, wird immer der zuerst definierte Endpunkt ausgelöst, unabhängig vom spezifischen Pfad der Anfrage.

Problem

Beachten Sie die folgende Routerdatei wobei drei Endpunkte definiert sind, jeder mit einem anderen Pfad, aber mit gemeinsamem Pfadparameter „project_id“:

</p>
<h1>GET API Endpoint 1</h1>
<p>@router.get("/project/{project_id}/{employee_id}")<br>async def method_one(project_id: str, organization_id: str, session: AsyncSession = Depends(get_db)):</p> <pre class="brush:php;toolbar:false"># ...

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_two(project_id: str, session : AsyncSession = Depends(get_db)):

# ...

Dieser Code zeigt unerwartetes Verhalten, wenn API-Endpunkte 2 und 3 die in Endpunkt 1 definierte Controller-Methode aufrufen (method_one ()).

Reason

In FastAPI erfolgt die Endpunktauswertung sequentiell. Daher wird Endpunkt 1 („/project/{project_id}/{employee_id}“) zuerst ausgewertet. Wenn eine nachfolgende Anfrage an Endpunkt 2 oder Endpunkt 3 gestellt wird, interpretiert FastAPI den Teil „/project/{project_id}“ des Pfads als project_id-Parameter für Endpunkt 1. Dies führt dazu, dass die Controller-Methode für Endpunkt 1 aufgerufen wird.

Lösung

Um dieses Problem zu beheben, sollte die Reihenfolge der Endpunktdefinition umgekehrt werden, sodass die Endpunkte mit demselben Pfadparameter vor dem Endpunkt definiert werden, der zusätzlichen Pfad enthält Parameter:

</p>
<h1>GET API Endpoint 2</h1>
<p>@router.get("/project/details/{project_id} ")</p>
<pre class="brush:php;toolbar:false"># ...

GET API Endpoint 3

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

# ...

GET API Endpoint 1

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

# ...

Durch diese Änderung wird FastAPI wertet zuerst die Endpunkte 2 und 3 aus und stellt sicher, dass die entsprechenden Controller-Methoden ausgeführt werden, wenn Anforderungen an diese Endpunkte gestellt werden.

Das obige ist der detaillierte Inhalt vonWie definiere ich mehrere API-Endpunkte mit demselben Pfadparameter in FastAPI?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn