Warum wird mein FastAPI-Endpunkt aufgerufen, wenn später ein anderer Endpunkt mit identischen Pfadparametern definiert wird?

Barbara Streisand
Freigeben: 2024-11-03 16:47:03
Original
552 Leute haben es durchsucht

Why is my FastAPI endpoint being called when a different endpoint with identical path parameters is defined later?

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

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

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!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!