Heim > Backend-Entwicklung > Python-Tutorial > Warum wird mein FastAPI-Endpunkt „method_one' unabhängig vom Pfad immer ausgeführt?

Warum wird mein FastAPI-Endpunkt „method_one' unabhängig vom Pfad immer ausgeführt?

Mary-Kate Olsen
Freigeben: 2024-10-30 11:24:02
Original
210 Leute haben es durchsucht

Why is my FastAPI Endpoint `method_one` Always Being Executed, Regardless of Path?

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

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!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage