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
Susan Sarandonasal
2024-12-16 09:26:10944semak imbas

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

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

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}

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

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

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

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);
});

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!

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