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
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 :
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
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}
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
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()
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())
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); });
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!