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

Patricia Arquette
Lepaskan: 2024-10-30 17:08:02
asal
408 orang telah melayarinya

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> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"># ...
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

DAPATKAN Titik Akhir API 2

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

# ...
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

DAPATKAN Titik Akhir API 3

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

# ...
Salin selepas log masuk
Salin selepas log masuk

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"># ...
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

DAPATKAN Titik Akhir API 3

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

# ...
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

DAPATKAN Titik Akhir API 1

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

# ...
Salin selepas log masuk
Salin selepas log masuk

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!

sumber:php.cn
Artikel sebelumnya:Mengapakah `list.__iadd__` mengubah suai senarai asal dan senarai yang ditetapkan, manakala `list.__add__` hanya mengubah suai senarai yang ditetapkan? Artikel seterusnya:Bagaimanakah saya boleh menghuraikan baris fail lebar tetap dengan cekap dalam Python?
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Isu terkini
Topik-topik yang berkaitan
Lagi>
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!