Mehrere API-Endpunkte mit Pfadparametern in FastAPI
Das Definieren mehrerer API-Endpunkte in FastAPI mit Variationen in der Pfadstruktur bei gleichzeitiger gemeinsamer Nutzung von Pfadparametern kann zu Problemen führen unerwartetes Verhalten. Im bereitgestellten Codebeispiel stoßen Sie auf ein Problem, bei dem der Controller „method_one“ für alle API-Endpunkte ausgeführt wird, unabhängig von ihren angegebenen Pfaden.
Grundlegendes zum Pfadabgleich
In FastAPI ist die Reihenfolge der Endpunktdefinitionen entscheidend. Der Pfadabgleich wird vom ersten in Ihrer App deklarierten Endpunkt ausgewertet. Daher wird Ihr Endpunkt für „/project/{project_id}/{employee_id}“ zuerst ausgewertet und die Pfadparameter aller anderen Endpunkte werden als Teil des project_id-Parameters interpretiert.
Lösung
Um dieses Problem zu beheben, müssen Sie sicherstellen, dass die Endpunkte mit spezifischeren Pfaden vor den Endpunkten mit allgemeineren Pfaden definiert werden. Dadurch wird sichergestellt, dass FastAPI zuerst den spezifischsten Endpunkt auswertet und die Pfadparameter wie erwartet übereinstimmen.
Das korrigierte Codebeispiel würde so aussehen:
<code class="python"># 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_three( project_id: str, session: AsyncSession = Depends(get_db) ): # ... # GET API Endpoint 1 @router.get("/project/{project_id}/{employee_id}") async def method_one( project_id: str, employee_id: str, session: AsyncSession = Depends(get_db) ): # ...</code>
Mit dieser Anpassung das spezifischste Endpunkte (/project/details/{project_id} und /project/metadata/{project_id}) werden vor dem allgemeineren Endpunkt (/project/{project_id}/{employee_id}) ausgewertet, um sicherzustellen, dass die richtigen Controller-Methoden ausgeführt werden Jeder API-Endpunkt.
Das obige ist der detaillierte Inhalt vonWarum wird mein FastAPI-Endpunkt „method_one' unabhängig vom Pfad immer ausgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!