Mehrere API-Endpunkte mit identischen Pfadparametern
Beim Entwerfen von RESTful-APIs mit FastAPI ist es möglich, mehrere Endpunkte mit unterschiedlichen, aber gemeinsamen Pfaden zu definieren Pfadparameter. In Fällen, in denen die Endpunktausführung jedoch inkonsistent wird, ist es wichtig, potenzielle Konfigurationsprobleme zu beheben.
Berücksichtigen Sie die folgende Routerdatei in FastAPI:
<code class="python"># GET API Endpoint 1 @router.get("/project/{project_id}/{employee_id}") async def method_one( project_id: str, organization_id: str, session: AsyncSession = Depends(get_db) ): # Controller method execution # GET API Endpoint 2 @router.get("/project/details/{project_id}") async def method_two( project_id: str, session: AsyncSession = Depends(get_db) ): # Controller method execution # GET API Endpoint 3 @router.get("/project/metadata/{project_id}") async def method_three( project_id: str, session: AsyncSession = Depends(get_db) ): # Controller method execution</code>
Beim unerwarteten Aufruf der API-Endpunkte 2 und 3 , wird der Controller von method_one anstelle der erwarteten method_two und method_ three ausgeführt. Diese Anomalie erfordert eine sorgfältige Prüfung der Konfiguration.
FastAPI wertet Endpunkte in der Reihenfolge aus, in der sie definiert sind. Daher wird project/{project_id}/{employee_id} zuerst ausgewertet. Anschließend löst jede Anfrage an Endpunkte 2 und 3 Endpunkt 1 aus.
Lösung:
Um dieses Problem zu beheben, ordnen Sie die Endpunktdefinitionen in der Routerdatei neu an und stellen Sie sicher, dass Endpunkte 2 und 3 werden vor Endpunkt 1 definiert:
<code class="python"># GET API Endpoint 2 @router.get("/project/details/{project_id}") # ... # GET API Endpoint 3 @router.get("/project/metadata/{project_id}") # ... # GET API Endpoint 1 @router.get("/project/{project_id}/{employee_id}") # ...</code>
Durch die Neuordnung der Endpunkte werden die entsprechenden Controller-Methoden beim API-Endpunktaufruf ausgeführt.
Das obige ist der detaillierte Inhalt vonWarum wird mein FastAPI-Endpunkt aufgerufen, wenn später ein anderer Endpunkt mit identischen Pfadparametern definiert wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!