Beim Erstellen von RESTful-APIs treten häufig Probleme im Zusammenhang mit dem Datenaustausch auf, insbesondere wenn POST-Anfragen beteiligt sind . Ein solches Problem besteht darin, dass beim Versuch, JSON-Daten zu senden, der Fehler „422 Unprocessable Entity“ angezeigt wird.
Im bereitgestellten Codebeispiel:
from fastapi import FastAPI app = FastAPI() @app.post("/") def main(user): return user
Dieser Code definiert einen POST-Endpunkt, der einen JSON erwartet Nutzlast, die einen „Benutzer“-Schlüssel enthält. Der Fehler tritt jedoch auf, wenn der HTTP-Client JSON-Daten sendet, die nicht dem erwarteten Format entsprechen. Um dieses Problem zu lösen, gibt es mehrere Optionen:
Pydantic-Modelle bieten eine Möglichkeit, JSON-Nutzlasten gemäß vordefinierten Schemata zu validieren und zu deserialisieren:
from pydantic import BaseModel class User(BaseModel): user: str @app.post("/") def main(user: User): return user
Mit Körperparametern in FastAPI können Sie direkt Analysieren Sie die JSON-Nutzlast, ohne ein Pydantic-Modell zu definieren:
from fastapi import Body @app.post("/") def main(user: str = Body(..., embed=True)): return {'user': user}
Obwohl dies weniger empfehlenswert ist, können Sie einen Dict-Typ verwenden, um die JSON-Nutzlast als Schlüssel zu empfangen. Wertepaar:
from typing import Dict, Any @app.post("/") def main(payload: Dict[Any, Any]): return payload
Wenn ja Stellen Sie sicher, dass die eingehenden Daten gültiges JSON sind. Sie können das Request-Objekt von Starlette verwenden, um sie zu analysieren:
from fastapi import Request @app.post("/") async def main(request: Request): return await request.json()
Sie können diese Optionen testen mit:
Python fordert Bibliothek an:
import requests url = 'http://127.0.0.1:8000/' payload = {'user': 'foo'} resp = requests.post(url=url, json=payload) print(resp.json())
JavaScript Fetch 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 die Implementierung eines dieser Ansätze können Sie den 422-Fehler beheben und JSON-Daten in Ihren FastAPI POST-Endpunkten erfolgreich verarbeiten.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit dem 422-Fehler von FastAPI beim Empfang von JSON-POST-Anfragen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!