Aller au contenu

Paramètres d'en-tête

🌐 Traduction par IA et humains

Cette traduction a été réalisée par une IA guidée par des humains. 🤝

Elle peut contenir des erreurs d'interprétation du sens original, ou paraître peu naturelle, etc. 🤖

Vous pouvez améliorer cette traduction en nous aidant à mieux guider le LLM d'IA.

Version anglaise

Vous pouvez définir des paramètres Header de la même manière que vous définissez des paramètres Query, Path et Cookie.

Importer Header

Commencez par importer Header :

from typing import Annotated

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(user_agent: Annotated[str | None, Header()] = None):
    return {"User-Agent": user_agent}
🤓 Other versions and variants

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(user_agent: str | None = Header(default=None)):
    return {"User-Agent": user_agent}

Déclarer des paramètres Header

Déclarez ensuite les paramètres d'en-tête en utilisant la même structure qu'avec Path, Query et Cookie.

Vous pouvez définir la valeur par défaut ainsi que tous les paramètres supplémentaires de validation ou d'annotation :

from typing import Annotated

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(user_agent: Annotated[str | None, Header()] = None):
    return {"User-Agent": user_agent}
🤓 Other versions and variants

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(user_agent: str | None = Header(default=None)):
    return {"User-Agent": user_agent}

Détails techniques

Header est une classe « sœur » de Path, Query et Cookie. Elle hérite également de la même classe commune Param.

Mais rappelez-vous que lorsque vous importez Query, Path, Header et d'autres depuis fastapi, ce sont en réalité des fonctions qui renvoient des classes spéciales.

Info

Pour déclarer des en-têtes, vous devez utiliser Header, sinon les paramètres seraient interprétés comme des paramètres de requête.

Conversion automatique

Header offre un peu de fonctionnalité supplémentaire par rapport à Path, Query et Cookie.

La plupart des en-têtes standards sont séparés par un caractère « trait d'union », également appelé « signe moins » (-).

Mais une variable comme user-agent est invalide en Python.

Ainsi, par défaut, Header convertit les caractères des noms de paramètres du tiret bas (_) en trait d'union (-) pour extraire et documenter les en-têtes.

De plus, les en-têtes HTTP ne sont pas sensibles à la casse, vous pouvez donc les déclarer avec le style Python standard (aussi appelé « snake_case »).

Vous pouvez donc utiliser user_agent comme vous le feriez normalement dans du code Python, au lieu d'avoir à mettre des majuscules aux premières lettres comme User_Agent ou quelque chose de similaire.

Si, pour une raison quelconque, vous devez désactiver la conversion automatique des traits bas en traits d'union, définissez le paramètre convert_underscores de Header sur False :

from typing import Annotated

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    strange_header: Annotated[str | None, Header(convert_underscores=False)] = None,
):
    return {"strange_header": strange_header}
🤓 Other versions and variants

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    strange_header: str | None = Header(default=None, convert_underscores=False),
):
    return {"strange_header": strange_header}

Alertes

Avant de définir convert_underscores sur False, gardez à l'esprit que certains proxies et serveurs HTTP interdisent l'utilisation d'en-têtes contenant des traits bas.

Gérer les en-têtes dupliqués

Il est possible de recevoir des en-têtes en double. Autrement dit, le même en-tête avec plusieurs valeurs.

Vous pouvez définir ces cas à l'aide d'une liste dans la déclaration de type.

Vous recevrez toutes les valeurs de l'en-tête dupliqué sous forme de list Python.

Par exemple, pour déclarer un en-tête X-Token qui peut apparaître plusieurs fois, vous pouvez écrire :

from typing import Annotated

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(x_token: Annotated[list[str] | None, Header()] = None):
    return {"X-Token values": x_token}
🤓 Other versions and variants

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(x_token: list[str] | None = Header(default=None)):
    return {"X-Token values": x_token}

Si vous communiquez avec ce chemin d'accès en envoyant deux en-têtes HTTP comme :

X-Token: foo
X-Token: bar

La réponse ressemblerait à ceci :

{
    "X-Token values": [
        "bar",
        "foo"
    ]
}

Récapitulatif

Déclarez les en-têtes avec Header, en suivant le même modèle que pour Query, Path et Cookie.

Et ne vous souciez pas des traits bas dans vos variables, FastAPI s'occupe de les convertir.