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.
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.