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.
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"># ...
@router.get("/project/details/{project_id}")
async def method_two(project_id: str, session: AsyncSession = Depends(get_db )):
# ...
@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 ()).
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.
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"># ...
@router.get("/project/metadata/{project_id}")
# ...
@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!