Maison > interface Web > js tutoriel > Comment gérer l'erreur 422 de FastAPI lors de la réception de requêtes JSON POST ?

Comment gérer l'erreur 422 de FastAPI lors de la réception de requêtes JSON POST ?

Susan Sarandon
Libérer: 2024-12-16 09:26:10
original
943 Les gens l'ont consulté

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

FastAPI : Erreur 422 avec la requête POST lors de l'envoi de données JSON

Lors de la construction d'API RESTful, il est courant de rencontrer des problèmes liés à l'échange de données, en particulier lorsque des requêtes POST sont impliquées . L'un de ces problèmes est la réception d'une erreur « 422 Unprocessable Entity » lors de la tentative d'envoi de données JSON.

Dans l'exemple de code fourni :

from fastapi import FastAPI

app = FastAPI()

@app.post("/")
def main(user):
    return user
Copier après la connexion

Ce code définit un point de terminaison POST qui attend un JSON. charge utile contenant une clé « utilisateur ». Cependant, l'erreur se produit lorsque le client HTTP envoie des données JSON qui ne correspondent pas au format attendu. Pour résoudre ce problème, il existe plusieurs options :

Option 1 : Utiliser des modèles Pydantic

Les modèles Pydantic offrent un moyen de valider et de désérialiser les charges utiles JSON selon des schémas prédéfinis :

from pydantic import BaseModel

class User(BaseModel):
    user: str

@app.post("/")
def main(user: User):
    return user
Copier après la connexion

Option 2 : Utiliser les paramètres du corps

Les paramètres du corps dans FastAPI vous permettent de directement analyser la charge utile JSON sans définir de modèle Pydantic :

from fastapi import Body

@app.post("/")
def main(user: str = Body(..., embed=True)):
    return {'user': user}
Copier après la connexion

Option 3 : Utiliser le type Dict

Bien que cela soit moins recommandé, vous pouvez utiliser un type Dict pour recevoir la charge utile JSON en tant que clé. paire de valeurs :

from typing import Dict, Any

@app.post("/")
def main(payload: Dict[Any, Any]):
    return payload
Copier après la connexion

Option 4 : Utiliser directement le corps de la requête

Si vous êtes sûr que les données entrantes sont des JSON valides, vous pouvez utiliser l'objet Request de Starlette pour les analyser :

from fastapi import Request

@app.post("/")
async def main(request: Request):
    return await request.json()
Copier après la connexion

Test des options

Vous pouvez tester ces options en utilisant :

Requêtes Python bibliothèque :

import requests

url = 'http://127.0.0.1:8000/'
payload = {'user': 'foo'}
resp = requests.post(url=url, json=payload)
print(resp.json())
Copier après la connexion

API JavaScript Fetch :

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

En implémentant l'une de ces approches, vous pouvez résoudre l'erreur 422 et gérer avec succès JSON données dans vos points de terminaison FastAPI POST.

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.cn
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