Zum Inhalt

Response-Statuscode

Genauso wie Sie ein Responsemodell angeben können, können Sie auch den HTTP-Statuscode fĂŒr die Response mit dem Parameter status_code in jeder der Pfadoperationen deklarieren:

  • @app.get()
  • @app.post()
  • @app.put()
  • @app.delete()
  • usw.
from fastapi import FastAPI

app = FastAPI()


@app.post("/items/", status_code=201)
async def create_item(name: str):
    return {"name": name}

Hinweis

Beachten Sie, dass status_code ein Parameter der „Dekorator“-Methode ist (get, post, usw.). Nicht der Pfadoperation-Funktion, wie alle anderen Parameter und der Body.

Dem status_code-Parameter wird eine Zahl mit dem HTTP-Statuscode ĂŒbergeben.

Info

Alternativ kann status_code auch ein IntEnum erhalten, wie etwa Pythons http.HTTPStatus.

Dies wird:

  • Diesen Statuscode mit der Response zurĂŒcksenden.
  • Diesen im OpenAPI-Schema dokumentieren (und somit in den BenutzeroberflĂ€chen):

Hinweis

Einige Responsecodes (siehe nÀchsten Abschnitt) kennzeichnen, dass die Response keinen Body hat.

FastAPI erkennt dies und erstellt eine OpenAPI-Dokumentation, die zeigt, dass es keinen Responsebody gibt.

Über HTTP-Statuscodes

Hinweis

Wenn Sie bereits wissen, was HTTP-Statuscodes sind, können Sie diesen Abschnitt ĂŒberspringen und mit dem nĂ€chsten fortfahren.

In HTTP senden Sie einen numerischen Statuscode mit 3 Ziffern als Teil der Response.

Diese Statuscodes haben einen zugeordneten Namen, um sie leichter zu erkennen, aber der wichtige Teil ist die Zahl.

Kurz gefasst:

  • 100 - 199 stehen fĂŒr „Information“. Sie verwenden diese selten direkt. Responses mit diesen Statuscodes dĂŒrfen keinen Body haben.
  • 200 - 299 stehen fĂŒr „Successful“-Responses („Erfolgreich“). Diese werden Sie am hĂ€ufigsten verwenden.
    • 200 ist der Default-Statuscode, was bedeutet, alles ist „OK“.
    • Ein weiteres Beispiel wĂ€re 201, „Created“ („Erzeugt“). Dieser wird ĂŒblicherweise verwendet, nachdem ein neuer Datensatz in der Datenbank erstellt wurde.
    • Ein spezieller Fall ist 204, „No Content“ („Kein Inhalt“). Diese Response wird verwendet, wenn es keinen Inhalt gibt, der an den Client zurĂŒckgeschickt werden soll, und diese Response darf daher keinen Body haben.
  • 300 - 399 stehen fĂŒr „Redirection“ („Umleitung“). Responses mit diesen Statuscodes können einen Body haben oder nicht, außer bei 304, „Not Modified“ („Nicht verĂ€ndert“), die keinen haben darf.
  • 400 - 499 stehen fĂŒr „Client error“-Responses („Client-Fehler“). Diese sind die zweithĂ€ufigsten, die Sie vermutlich verwenden werden.
    • Ein Beispiel ist 404, fĂŒr eine „Not Found“-Response („Nicht gefunden“).
    • FĂŒr allgemeine Fehler beim Client können Sie einfach 400 verwenden.
  • 500 - 599 stehen fĂŒr Server-Fehler. Diese verwenden Sie fast nie direkt. Wenn in Ihrem Anwendungscode oder Server etwas schiefgeht, wird automatisch einer dieser Fehler-Statuscodes zurĂŒckgegeben.

Tipp

Um mehr ĂŒber die einzelnen Statuscodes zu erfahren und welcher wofĂŒr verwendet wird, sehen Sie sich die MDN Dokumentation ĂŒber HTTP-Statuscodes an.

AbkĂŒrzung zur Erinnerung an die Namen

Lassen Sie uns das vorherige Beispiel noch einmal anschauen:

from fastapi import FastAPI

app = FastAPI()


@app.post("/items/", status_code=201)
async def create_item(name: str):
    return {"name": name}

201 ist der Statuscode fĂŒr „Created“ („Erzeugt“).

Aber Sie mĂŒssen sich nicht merken, was jeder dieser Codes bedeutet.

Sie können die Annehmlichkeit von Variablen aus fastapi.status nutzen.

from fastapi import FastAPI, status

app = FastAPI()


@app.post("/items/", status_code=status.HTTP_201_CREATED)
async def create_item(name: str):
    return {"name": name}

Diese sind nur eine Annehmlichkeit, sie enthalten dieselbe Zahl, aber so können Sie die AutovervollstÀndigung Ihres Editors verwenden, um sie zu finden:

Technische Details

Sie könnten auch from starlette import status verwenden.

FastAPI bietet dieselben starlette.status-Codes auch via fastapi.status an, rein zu Ihrer Annehmlichkeit als Entwickler. Aber sie stammen direkt von Starlette.

Den Defaultwert Àndern

SpĂ€ter im Handbuch fĂŒr fortgeschrittene Benutzer werden Sie sehen, wie Sie einen anderen Statuscode zurĂŒckgeben können, als den Default, den Sie hier deklarieren.