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.
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"># ...
@router.get("/project/details/{project_id}")
async def method_two(project_id: str, sesi: AsyncSession = Depends(get_db )):
# ...
@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 ()).
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.
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"># ...
@router.get("/project/metadata/{project_id}")
# ...
@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!