Zum Inhalt

Header-Parameter-Modelle

🌐 Übersetzung durch KI und Menschen

Diese Übersetzung wurde von KI erstellt, angeleitet von Menschen. đŸ€

Sie könnte Fehler enthalten, etwa MissverstĂ€ndnisse des ursprĂŒnglichen Sinns oder unnatĂŒrliche Formulierungen, usw. đŸ€–

Sie können diese Übersetzung verbessern, indem Sie uns helfen, die KI-LLM besser anzuleiten.

Englische Version

Wenn Sie eine Gruppe verwandter Header-Parameter haben, können Sie ein Pydantic-Modell erstellen, um diese zu deklarieren.

Dadurch können Sie das Modell an mehreren Stellen wiederverwenden und auch Validierungen und Metadaten fĂŒr alle Parameter gleichzeitig deklarieren. 😎

Hinweis

Dies wird seit FastAPI Version 0.115.0 unterstĂŒtzt. đŸ€“

Header-Parameter mit einem Pydantic-Modell

Deklarieren Sie die erforderlichen Header-Parameter in einem Pydantic-Modell und dann den Parameter als Header:

fromtypingimport Annotated
fromfastapiimport FastAPI, Header
frompydanticimport BaseModel
app = FastAPI()
classCommonHeaders(BaseModel):
 host: str
 save_data: bool
 if_modified_since: str | None = None
 traceparent: str | None = None
 x_tag: list[str] = []
@app.get("/items/")
async defread_items(headers: Annotated[CommonHeaders, Header()]):
 return headers
đŸ€“ Other versions and variants

Tip

Prefer to use the Annotated version if possible.

fromfastapiimport FastAPI, Header
frompydanticimport BaseModel
app = FastAPI()
classCommonHeaders(BaseModel):
 host: str
 save_data: bool
 if_modified_since: str | None = None
 traceparent: str | None = None
 x_tag: list[str] = []
@app.get("/items/")
async defread_items(headers: CommonHeaders = Header()):
 return headers

FastAPI wird die Daten fĂŒr jedes Feld aus den Headern des Request extrahieren und Ihnen das von Ihnen definierte Pydantic-Modell geben.

Die Dokumentation testen

Sie können die erforderlichen Header in der DokumentationsoberflÀche unter /docs sehen:

ZusÀtzliche Header verbieten

In einigen speziellen AnwendungsfÀllen (wahrscheinlich nicht sehr hÀufig) möchten Sie möglicherweise die Header einschrÀnken, die Sie erhalten möchten.

Sie können Pydantics Modellkonfiguration verwenden, um extra Felder zu verbieten (forbid):

fromtypingimport Annotated
fromfastapiimport FastAPI, Header
frompydanticimport BaseModel
app = FastAPI()
classCommonHeaders(BaseModel):
 model_config = {"extra": "forbid"}
 host: str
 save_data: bool
 if_modified_since: str | None = None
 traceparent: str | None = None
 x_tag: list[str] = []
@app.get("/items/")
async defread_items(headers: Annotated[CommonHeaders, Header()]):
 return headers
đŸ€“ Other versions and variants

Tip

Prefer to use the Annotated version if possible.

fromfastapiimport FastAPI, Header
frompydanticimport BaseModel
app = FastAPI()
classCommonHeaders(BaseModel):
 model_config = {"extra": "forbid"}
 host: str
 save_data: bool
 if_modified_since: str | None = None
 traceparent: str | None = None
 x_tag: list[str] = []
@app.get("/items/")
async defread_items(headers: CommonHeaders = Header()):
 return headers

Wenn ein Client versucht, einige zusÀtzliche Header zu senden, erhÀlt er eine Error-Response.

Zum Beispiel, wenn der Client versucht, einen tool-Header mit einem Wert von plumbus zu senden, erhÀlt er eine Error-Response, die ihm mitteilt, dass der Header-Parameter tool nicht erlaubt ist:

{
"detail":[
{
"type":"extra_forbidden",
"loc":["header","tool"],
"msg":"Extra inputs are not permitted",
"input":"plumbus",
}
]
}

Automatische Umwandlung von Unterstrichen deaktivieren

Ähnlich wie bei regulĂ€ren Header-Parametern werden bei der Verwendung von Unterstrichen in den Parameternamen diese automatisch in Bindestriche umgewandelt.

Wenn Sie beispielsweise einen Header-Parameter save_data im Code haben, wird der erwartete HTTP-Header save-data sein, und er wird auch so in der Dokumentation angezeigt.

Falls Sie aus irgendeinem Grund diese automatische Umwandlung deaktivieren mĂŒssen, können Sie dies auch fĂŒr Pydantic-Modelle fĂŒr Header-Parameter tun.

fromtypingimport Annotated
fromfastapiimport FastAPI, Header
frompydanticimport BaseModel
app = FastAPI()
classCommonHeaders(BaseModel):
 host: str
 save_data: bool
 if_modified_since: str | None = None
 traceparent: str | None = None
 x_tag: list[str] = []
@app.get("/items/")
async defread_items(
 headers: Annotated[CommonHeaders, Header(convert_underscores=False)],
):
 return headers
đŸ€“ Other versions and variants

Tip

Prefer to use the Annotated version if possible.

fromfastapiimport FastAPI, Header
frompydanticimport BaseModel
app = FastAPI()
classCommonHeaders(BaseModel):
 host: str
 save_data: bool
 if_modified_since: str | None = None
 traceparent: str | None = None
 x_tag: list[str] = []
@app.get("/items/")
async defread_items(headers: CommonHeaders = Header(convert_underscores=False)):
 return headers

Achtung

Bevor Sie convert_underscores auf False setzen, bedenken Sie, dass einige HTTP-Proxies und -Server die Verwendung von Headern mit Unterstrichen nicht zulassen.

Zusammenfassung

Sie können Pydantic-Modelle verwenden, um Header in FastAPI zu deklarieren. 😎

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /