Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Mengendalikan Ralat 422 FastAPI Apabila Menerima Permintaan JSON POST?

Bagaimana untuk Mengendalikan Ralat 422 FastAPI Apabila Menerima Permintaan JSON POST?

Susan Sarandon
Lepaskan: 2024-12-16 09:26:10
asal
943 orang telah melayarinya

How to Handle FastAPI's 422 Error When Receiving JSON POST Requests?

FastAPI: Ralat 422 dengan Permintaan POST Semasa Menghantar Data JSON

Apabila membina API RESTful, adalah perkara biasa untuk menghadapi isu yang berkaitan dengan pertukaran data, terutamanya apabila permintaan POST terlibat . Satu isu sedemikian ialah menerima ralat "422 Entiti Tidak Boleh Diproses" semasa cuba menghantar data JSON.

Dalam contoh kod yang disediakan:

from fastapi import FastAPI

app = FastAPI()

@app.post("/")
def main(user):
    return user
Salin selepas log masuk

Kod ini mentakrifkan titik akhir POST yang menjangkakan JSON muatan yang mengandungi kunci "pengguna". Walau bagaimanapun, ralat berlaku apabila klien HTTP menghantar data JSON yang tidak sepadan dengan format yang dijangkakan. Untuk menyelesaikan masalah ini, terdapat beberapa pilihan:

Pilihan 1: Menggunakan Model Pydantic

Model Pydantic menyediakan cara untuk mengesahkan dan menyahsiri muatan JSON mengikut skema yang telah ditetapkan:

from pydantic import BaseModel

class User(BaseModel):
    user: str

@app.post("/")
def main(user: User):
    return user
Salin selepas log masuk

Pilihan 2: Menggunakan Parameter Badan

Parameter badan dalam FastAPI membenarkan anda menghuraikan secara langsung muatan JSON tanpa mentakrifkan model Pydantic:

from fastapi import Body

@app.post("/")
def main(user: str = Body(..., embed=True)):
    return {'user': user}
Salin selepas log masuk

Pilihan 3: Menggunakan Jenis Dict

Walaupun kurang disyorkan, anda boleh menggunakan jenis Dict untuk menerima JSON muatan sebagai pasangan nilai kunci:

from typing import Dict, Any

@app.post("/")
def main(payload: Dict[Any, Any]):
    return payload
Salin selepas log masuk

Pilihan 4: Menggunakan Badan Permintaan Secara langsung

Jika anda pasti bahawa data yang masuk adalah JSON yang sah, anda boleh menggunakan objek Permintaan Starlette untuk menghuraikannya:

from fastapi import Request

@app.post("/")
async def main(request: Request):
    return await request.json()
Salin selepas log masuk

Menguji Pilihan

Anda boleh uji pilihan ini menggunakan:

Permintaan Python perpustakaan:

import requests

url = 'http://127.0.0.1:8000/'
payload = {'user': 'foo'}
resp = requests.post(url=url, json=payload)
print(resp.json())
Salin selepas log masuk

JavaScript Fetch API:

fetch('/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({'user': 'foo'})
})
.then(resp => resp.json()) // or, resp.text(), etc
.then(data => {
  console.log(data); // handle response data
})
.catch(error => {
  console.error(error);
});
Salin selepas log masuk

Dengan melaksanakan salah satu pendekatan ini, anda boleh menyelesaikan ralat 422 dan berjaya mengendalikan JSON data dalam titik akhir FastAPI POST anda.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Ralat 422 FastAPI Apabila Menerima Permintaan JSON POST?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan