Comment personnaliser les réponses d'erreur pour les demandes invalides dans FastAPI ?

Susan Sarandon
Libérer: 2024-10-21 06:25:03
original
610 Les gens l'ont consulté

How to Customize Error Responses for Invalid Requests in FastAPI?

Gestion personnalisée des réponses aux erreurs dans FastAPI

Dans les applications FastAPI, la gestion des erreurs est essentielle pour fournir des réponses informatives aux clients. Un problème courant rencontré est la réception d’une erreur 422 Unprocessable Entity lors de l’envoi de données supplémentaires ou non valides dans les requêtes. Cet article montrera comment personnaliser la réponse d'erreur pour gérer de tels scénarios.

Considérez l'exemple de backend FastAPI suivant :

from fastapi import FastAPI

app = FastAPI

class Demo(BaseModel):
    content: str = None

@app.post("/demo")
async def demoFunc(d: Demo):
    return d.content
Copier après la connexion

Lors de l'envoi d'une requête avec des données supplémentaires, telles que data = { "content": "du texte ici"}aaaa, l'API renvoie une erreur 422 avec la réponse suivante :

{
  "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
      }
    }
  ]
}
Copier après la connexion

Pour personnaliser la réponse d'erreur, FastAPI permet de remplacer le gestionnaire d'exceptions de validation de la demande. Commencez par importer les modules nécessaires et définissez une fonction de gestionnaire d'exceptions personnalisée :

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"
            }
        }),
    )
Copier après la connexion

Cette fonction intercepte l'exception RequestValidationError et génère une réponse JSON personnalisée. Vous pouvez inclure les détails de l'erreur, le corps de la requête et tout message personnalisé.

Par exemple, l'utilisation d'un corps JSON non valide entraînerait désormais une réponse similaire à :

{
    "detail": [
        {
            "loc": ["body", 1],
            "msg": "invalid json",
            "type": "json.decoder.JSONDecodeError",
            "ctx": {}
        }
    ],
    "body": {},
    "custom msg": {
        "Your error message"
    }
}
Copier après la connexion

Alternativement, vous pouvez renvoyer une réponse en texte brut avec uniquement le message d'erreur :

from fastapi.responses import PlainTextResponse

@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request, exc):
    return PlainTextResponse(str(exc), status_code=422) 
Copier après la connexion

En personnalisant le comportement de réponse d'erreur dans FastAPI, vous pouvez fournir une gestion des erreurs plus informative et cohérente pour vos API. Cela améliore l'expérience utilisateur et simplifie le débogage pour les développeurs et les consommateurs d'API.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!