Aller au contenu

Utiliser Request directement

🌐 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

Jusqu'à présent, vous avez déclaré les parties de la requête dont vous avez besoin, avec leurs types.

En récupérant des données depuis :

  • Le chemin, sous forme de paramètres.
  • En-têtes.
  • Cookies.
  • etc.

Et ce faisant, FastAPI valide ces données, les convertit et génère automatiquement la documentation de votre API.

Mais il existe des situations où vous pouvez avoir besoin d'accéder directement à l'objet Request.

Détails sur l'objet Request

Comme FastAPI est en fait Starlette en dessous, avec une couche de plusieurs outils au-dessus, vous pouvez utiliser directement l'objet Request de Starlette lorsque vous en avez besoin.

Cela signifie aussi que si vous récupérez des données directement à partir de l'objet Request (par exemple, lire le corps), elles ne seront pas validées, converties ni documentées (avec OpenAPI, pour l'interface utilisateur automatique de l'API) par FastAPI.

En revanche, tout autre paramètre déclaré normalement (par exemple, le corps avec un modèle Pydantic) sera toujours validé, converti, annoté, etc.

Mais il existe des cas spécifiques où il est utile d'obtenir l'objet Request.

Utiliser l'objet Request directement

Imaginons que vous souhaitiez obtenir l'adresse IP/l'hôte du client dans votre fonction de chemin d'accès.

Pour cela, vous devez accéder directement à la requête.

from fastapi import FastAPI, Request

app = FastAPI()


@app.get("/items/{item_id}")
def read_root(item_id: str, request: Request):
    client_host = request.client.host
    return {"client_host": client_host, "item_id": item_id}
🤓 Other versions and variants
from fastapi import FastAPI, Request

app = FastAPI()


@app.get("/items/{item_id}")
def read_root(item_id: str, request: Request):
    client_host = request.client.host
    return {"client_host": client_host, "item_id": item_id}

En déclarant un paramètre de fonction de chemin d'accès de type Request, FastAPI saura passer la Request dans ce paramètre.

Astuce

Notez que, dans ce cas, nous déclarons un paramètre de chemin en plus du paramètre de requête.

Ainsi, le paramètre de chemin sera extrait, validé, converti vers le type spécifié et annoté avec OpenAPI.

De la même façon, vous pouvez déclarer tout autre paramètre normalement, et en plus, obtenir aussi la Request.

Documentation de Request

Vous pouvez lire plus de détails sur l'objet Request sur le site de documentation officiel de Starlette.

Détails techniques

Vous pouvez également utiliser from starlette.requests import Request.

FastAPI le fournit directement pour votre commodité, en tant que développeur. Mais il provient directement de Starlette.