Bagaimana untuk Menyesuaikan Respons Ralat untuk Permintaan Tidak Sah dalam FastAPI?

Susan Sarandon
Lepaskan: 2024-10-21 06:25:03
asal
610 orang telah melayarinya

How to Customize Error Responses for Invalid Requests in FastAPI?

Pengendalian Respons Ralat Tersuai dalam FastAPI

Dalam aplikasi FastAPI, pengendalian ralat adalah penting untuk memberikan respons bermaklumat kepada pelanggan. Satu isu biasa yang dihadapi ialah menerima ralat 422 Entiti Tidak Dapat Diproses apabila menghantar data tambahan atau tidak sah dalam permintaan. Artikel ini akan menunjukkan cara menyesuaikan respons ralat untuk mengendalikan senario sedemikian.

Pertimbangkan contoh bahagian belakang FastAPI berikut:

from fastapi import FastAPI

app = FastAPI

class Demo(BaseModel):
    content: str = None

@app.post("/demo")
async def demoFunc(d: Demo):
    return d.content
Salin selepas log masuk

Setelah menghantar permintaan dengan data tambahan, seperti data = { "content": "some text here"}aaaa, API mengembalikan ralat 422 dengan respons berikut:

{
  "detail": [
    {
      "loc": [
        "body",
        47
      ],
      "msg": "Extra data: line 4 column 2 (char 47)",
      "type": "value_error.jsondecode",
      "ctx": {
        "msg": "Extra data",
        "doc": "{\n  \"content\": \"some text here\"}aaaaa",
        "pos": 47,
        "lineno": 4,
        "colno": 2
      }
    }
  ]
}
Salin selepas log masuk

Untuk menyesuaikan respons ralat, FastAPI membenarkan untuk mengatasi pengendali pengecualian pengesahan permintaan. Mulakan dengan mengimport modul yang diperlukan dan mentakrifkan fungsi pengendali pengecualian tersuai:

from fastapi import FastAPI, Body, Request, status
from fastapi.encoders import jsonable_encoder
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse

app = FastAPI()

@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request: Request, exc: RequestValidationError):
    return JSONResponse(
        status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
        content=jsonable_encoder({
            "detail": exc.errors(),
            "body": exc.body,
            "custom msg": {
                "Your error message"
            }
        }),
    )
Salin selepas log masuk

Fungsi ini memintas pengecualian RequestValidationError dan menjana respons JSON tersuai. Anda boleh memasukkan butiran ralat, isi permintaan dan sebarang mesej tersuai.

Sebagai contoh, menggunakan badan JSON yang tidak sah kini akan menghasilkan respons yang serupa dengan:

{
    "detail": [
        {
            "loc": ["body", 1],
            "msg": "invalid json",
            "type": "json.decoder.JSONDecodeError",
            "ctx": {}
        }
    ],
    "body": {},
    "custom msg": {
        "Your error message"
    }
}
Salin selepas log masuk

Sebagai alternatif, anda boleh mengembalikan respons teks biasa dengan hanya mesej ralat:

from fastapi.responses import PlainTextResponse

@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request, exc):
    return PlainTextResponse(str(exc), status_code=422) 
Salin selepas log masuk

Dengan menyesuaikan gelagat tindak balas ralat dalam FastAPI, anda boleh menyediakan pengendalian ralat yang lebih bermaklumat dan konsisten untuk API anda. Ini meningkatkan pengalaman pengguna dan memudahkan penyahpepijatan untuk kedua-dua pembangun dan pengguna API.

Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan Respons Ralat untuk Permintaan Tidak Sah dalam FastAPI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!