Maison >développement back-end >Tutoriel Python >Comment gérer efficacement les requêtes POST avec des données JSON dans FastAPI ?
FastAPI : gestion des requêtes POST avec des données JSON
Lors de la création d'API, il est essentiel de gérer différents types de requêtes HTTP. Bien que les requêtes GET fonctionnent correctement, les requêtes POST rencontrent souvent des erreurs, notamment lors de l'envoi de données JSON. Pour résoudre l'erreur « 422 Unprocessable Entity » couramment rencontrée avec les requêtes POST dans FastAPI, nous explorons différentes approches pour définir les points de terminaison qui attendent des données JSON.
Approche 1 : Utilisation de modèles Pydantic
Pour définir un corps de requête qui accepte les données JSON, vous pouvez utiliser les modèles Pydantic. Créez un modèle avec les champs souhaités et intégrez-le dans la définition de votre point de terminaison.
from pydantic import BaseModel class User(BaseModel): user: str @app.post('/') def main(user: User): return user
Approche 2 : Paramètres corporels avec intégration
Si vous préférez ne pas utiliser Pydantic modèles, vous pouvez utiliser les paramètres Body avec l’option d’intégration. Cela vous permet d'accéder directement au corps de la requête sous forme de champ dans votre fonction.
from fastapi import Body @app.post('/') def main(user: str = Body(..., embed=True)): return {'user': user}
Approche 3 : Paramètres de dict (moins recommandés)
Une approche moins recommandée implique d'utiliser un type de dictionnaire comme paramètre. Cependant, cette méthode ne fournit pas de validation personnalisée pour les attributs et limite la flexibilité.
from typing import Dict, Any @app.post('/') def main(payload: Dict[Any, Any]): return payload
Approche 4 : Utilisation de l'objet de requête FastAPI
Si vous êtes sûr de les données JSON entrantes, vous pouvez y accéder directement à l'aide de l'objet FastAPI Request. N'oubliez pas que cette approche nécessite de définir votre point de terminaison avec async def.
from fastapi import Request @app.post('/') async def main(request: Request): return await request.json()
Tester votre code
Pour tester vos points de terminaison, vous pouvez utiliser soit la bibliothèque de requêtes Python, soit l'API JavaScript Fetch.
Utilisation de Python requêtes :
import requests url = 'http://127.0.0.1:8000/' payload ={'user': 'foo'} resp = requests.post(url=url, json=payload) print(resp.json())
Utilisation de l'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 choisissant l'approche appropriée en fonction de vos besoins spécifiques et en considérant les différentes options de test , vous pouvez gérer efficacement les requêtes POST avec des données JSON dans FastAPI.
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!