Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menentukan Titik Akhir API Berbilang dengan Parameter Laluan yang Sama dalam FastAPI?

Bagaimana untuk Menentukan Titik Akhir API Berbilang dengan Parameter Laluan yang Sama dalam FastAPI?

Patricia Arquette
Patricia Arquetteasal
2024-10-30 17:08:02410semak imbas

How to Define Multiple API Endpoints with the Same Path Parameter in FastAPI?

Mentakrifkan Berbilang Titik Akhir API dengan Parameter Laluan Yang Sama dalam FastAPI

Dalam FastAPI, mentakrifkan berbilang titik akhir API dengan parameter laluan yang sama tetapi berbeza jalan tidak lurus. Memandangkan susunan penilaian titik akhir penting, titik akhir yang ditakrifkan dahulu akan sentiasa dicetuskan, tanpa mengira laluan khusus permintaan.

Masalah

Pertimbangkan fail penghala berikut di mana tiga titik akhir ditakrifkan, setiap satu dengan laluan berbeza tetapi berkongsi parameter laluan "project_id":

</p>
<h1>DAPATKAN Titik Akhir API 1</h1>
<p>@router.get("/project/{project_id}/{employee_id}")<br>async def method_one(project_id: str, organization_id: str, session: AsyncSession = Depends(get_db)):</p> <pre class="brush:php;toolbar:false"># ...

DAPATKAN Titik Akhir API 2

@router.get("/project/details/{project_id}")
async def method_two(project_id: str, sesi: AsyncSession = Depends(get_db )):

# ...

DAPATKAN Titik Akhir API 3

@router.get("/project/metadata/{project_id}")
async def method_three(project_id: str, session : AsyncSession = Depends(get_db)):

# ...

Kod ini mempamerkan tingkah laku yang tidak dijangka di mana Titik Akhir API 2 dan 3 menggunakan kaedah pengawal yang ditakrifkan dalam Endpoint 1 (method_one ()).

Sebab

Dalam FastAPI, penilaian titik akhir berlaku secara berurutan. Oleh itu, Endpoint 1 ("/project/{project_id}/{employee_id}") dinilai terlebih dahulu. Apabila permintaan seterusnya dibuat kepada Endpoint 2 atau Endpoint 3, FastAPI mentafsir bahagian "/project/{project_id}" laluan sebagai parameter project_id untuk Endpoint 1. Ini menyebabkan kaedah pengawal untuk Endpoint 1 digunakan.

Penyelesaian

Untuk menyelesaikan isu ini, susunan definisi titik akhir hendaklah diterbalikkan supaya titik akhir dengan parameter laluan yang sama ditakrifkan sebelum titik akhir yang merangkumi laluan tambahan parameter:

</p>
<h1>DAPATKAN Titik Akhir API 2</h1>
<p>@router.get("/project/details/{project_id} ")</p>
<pre class="brush:php;toolbar:false"># ...

DAPATKAN Titik Akhir API 3

@router.get("/project/metadata/{project_id}")

# ...

DAPATKAN Titik Akhir API 1

@router.get("/project/{project_id}/{employee_id}")

# ...

Dengan membuat pengubahsuaian ini, FastAPI akan menilai Titik Akhir 2 dan 3 terlebih dahulu, memastikan kaedah pengawal yang sesuai dilaksanakan apabila permintaan dibuat ke titik akhir tersebut.

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Titik Akhir API Berbilang dengan Parameter Laluan yang Sama dalam FastAPI?. 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