Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah titik akhir FastAPI saya dipanggil apabila titik akhir yang berbeza dengan parameter laluan yang sama ditakrifkan kemudian?

Mengapakah titik akhir FastAPI saya dipanggil apabila titik akhir yang berbeza dengan parameter laluan yang sama ditakrifkan kemudian?

Barbara Streisand
Barbara Streisandasal
2024-11-03 16:47:03606semak imbas

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

Berbilang Titik Akhir API dengan Parameter Laluan Sama

Apabila mereka bentuk API RESTful menggunakan FastAPI, anda boleh mentakrifkan berbilang titik akhir dengan laluan berbeza tetapi berkongsi parameter laluan. Walau bagaimanapun, dalam kes di mana pelaksanaan titik akhir menjadi tidak konsisten, adalah penting untuk menangani isu konfigurasi yang berpotensi.

Pertimbangkan fail penghala berikut dalam 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>

Apabila menggunakan titik akhir API 2 dan 3, secara tidak dijangka , pengawal method_one dilaksanakan bukannya method_two dan method_three yang dijangkakan. Anomali ini memerlukan pemeriksaan yang teliti terhadap konfigurasi.

FastAPI menilai titik akhir dalam urutan yang ditentukan. Oleh itu, projek/{project_id}/{employee_id} akan dinilai terlebih dahulu. Selepas itu, sebarang permintaan kepada titik akhir 2 dan 3 akan mencetuskan titik akhir 1.

Penyelesaian:

Untuk menyelesaikan isu ini, susun semula definisi titik akhir dalam fail penghala, memastikan bahawa titik akhir 2 dan 3 ditakrifkan sebelum titik tamat 1:

<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>

Dengan menyusun semula titik tamat, kaedah pengawal yang sesuai akan dilaksanakan selepas penyerahan titik akhir API.

Atas ialah kandungan terperinci Mengapakah titik akhir FastAPI saya dipanggil apabila titik akhir yang berbeza dengan parameter laluan yang sama ditakrifkan kemudian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn