Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man POST-Anfragen mit JSON-Daten in FastAPI effektiv verarbeiten?
FastAPI: Umgang mit POST-Anfragen mit JSON-Daten
Beim Erstellen von APIs ist es wichtig, verschiedene Arten von HTTP-Anfragen zu verarbeiten. Während GET-Anfragen reibungslos funktionieren, treten bei POST-Anfragen häufig Fehler auf, insbesondere beim Senden von JSON-Daten. Um den „422 Unprocessable Entity“-Fehler zu beheben, der häufig bei POST-Anfragen in FastAPI auftritt, untersuchen wir verschiedene Ansätze zur Definition von Endpunkten, die JSON-Daten erwarten.
Ansatz 1: Verwendung von Pydantic-Modellen
Um einen Anforderungstext zu definieren, der JSON-Daten akzeptiert, können Sie Pydantic-Modelle verwenden. Erstellen Sie ein Modell mit Ihren gewünschten Feldern und integrieren Sie es in Ihre Endpunktdefinition.
from pydantic import BaseModel class User(BaseModel): user: str @app.post('/') def main(user: User): return user
Ansatz 2: Körperparameter mit Einbettung
Wenn Sie Pydantic lieber nicht verwenden möchten Modelle können Sie Körperparameter mit der Einbettungsoption verwenden. Dadurch können Sie direkt auf den Anforderungstext als Feld in Ihrer Funktion zugreifen.
from fastapi import Body @app.post('/') def main(user: str = Body(..., embed=True)): return {'user': user}
Ansatz 3: Parameter diktieren (weniger empfohlen)
Ein weniger empfohlener Ansatz beinhaltet die Verwendung eines Wörterbuchtyps als Parameter. Diese Methode bietet jedoch keine benutzerdefinierte Validierung für Attribute und schränkt die Flexibilität ein.
from typing import Dict, Any @app.post('/') def main(payload: Dict[Any, Any]): return payload
Ansatz 4: Verwendung des FastAPI-Anforderungsobjekts
Wenn Sie sich sicher sind Auf die eingehenden JSON-Daten können Sie über das FastAPI-Request-Objekt direkt darauf zugreifen. Denken Sie daran, dass dieser Ansatz die Definition Ihres Endpunkts mit async def erfordert.
from fastapi import Request @app.post('/') async def main(request: Request): return await request.json()
Testen Ihres Codes
Um Ihre Endpunkte zu testen, können Sie entweder die Python-Anforderungsbibliothek oder verwenden die JavaScript-Abruf-API.
Mit Python Anfragen:
import requests url = 'http://127.0.0.1:8000/' payload ={'user': 'foo'} resp = requests.post(url=url, json=payload) print(resp.json())
Verwendung der JavaScript-Abruf-API:
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); });
Durch Auswahl des geeigneten Ansatzes basierend auf Ihren spezifischen Anforderungen und Berücksichtigung der verschiedenen Testoptionen , können Sie POST-Anfragen effektiv mit JSON-Daten in FastAPI verarbeiten.
Das obige ist der detaillierte Inhalt vonWie kann man POST-Anfragen mit JSON-Daten in FastAPI effektiv verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!