Maison >développement back-end >Tutoriel Python >Comment gérer efficacement les requêtes POST avec des données JSON dans FastAPI ?

Comment gérer efficacement les requêtes POST avec des données JSON dans FastAPI ?

DDD
DDDoriginal
2024-12-29 01:22:09834parcourir

How to Effectively Handle POST Requests with JSON Data in 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!

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