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

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

Patricia Arquette
Freigeben: 2024-10-30 17:08:02
Original
499 Leute haben es durchsucht

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> <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"># ...
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

GET API Endpoint 2

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

# ...
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

GET API Endpoint 3

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

# ...
Nach dem Login kopieren
Nach dem Login kopieren

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>
<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"># ...
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

GET API Endpoint 3

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

# ...
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

GET API Endpoint 1

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

# ...
Nach dem Login kopieren
Nach dem Login kopieren

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!

Quelle:php.cn
Vorheriger Artikel:Warum ändert „list.__iadd__“ sowohl die ursprüngliche als auch die zugewiesene Liste, während „list.__add__“ nur die zugewiesene Liste ändert? Nächster Artikel:Wie kann ich Dateizeilen mit fester Breite in Python effizient analysieren?
Erklärung dieser Website
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
Neueste Artikel des Autors
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage