Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man POST-Anfragen mit JSON-Daten in FastAPI effektiv verarbeiten?

Wie kann man POST-Anfragen mit JSON-Daten in FastAPI effektiv verarbeiten?

DDD
DDDOriginal
2024-12-29 01:22:09811Durchsuche

How to Effectively Handle POST Requests with JSON Data in FastAPI?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn