Maison  >  Article  >  développement back-end  >  Comment personnaliser les réponses d'erreur pour les demandes invalides dans FastAPI ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-10-21 06:25:03611parcourir

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

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
      }
    }
  ]
}

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"
            }
        }),
    )

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"
    }
}

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) 

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!

Déclaration:
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