Aller au contenu

FastAPI

🌐 Translation by AI and humans

This translation was made by AI guided by humans. đŸ€

It could have mistakes of misunderstanding the original meaning, or looking unnatural, etc. đŸ€–

You can improve this translation by helping us guide the AI LLM better.

English version

FastAPI

Framework FastAPI, haute performance, facile Ă  apprendre, rapide Ă  coder, prĂȘt pour la production

Test Coverage Package version Supported Python versions


Documentation : https://fastapi.tiangolo.com/fr

Code Source : https://github.com/fastapi/fastapi


FastAPI est un framework web moderne et rapide (haute performance) pour la création d'API avec Python, basé sur les annotations de type standard de Python.

Les principales fonctionnalités sont :

  • Rapide : trĂšs hautes performances, au niveau de NodeJS et Go (grĂące Ă  Starlette et Pydantic). L'un des frameworks Python les plus rapides.
  • Rapide Ă  coder : augmente la vitesse de dĂ©veloppement des fonctionnalitĂ©s d'environ 200 % Ă  300 %. *
  • Moins de bugs : rĂ©duit d'environ 40 % les erreurs induites par le dĂ©veloppeur. *
  • Intuitif : excellente compatibilitĂ© avec les Ă©diteurs. AutocomplĂ©tion partout. Moins de temps passĂ© Ă  dĂ©boguer.
  • Facile : conçu pour ĂȘtre facile Ă  utiliser et Ă  apprendre. Moins de temps passĂ© Ă  lire les documents.
  • Concis : diminue la duplication de code. Plusieurs fonctionnalitĂ©s Ă  partir de chaque dĂ©claration de paramĂštre. Moins de bugs.
  • Robuste : obtenez un code prĂȘt pour la production. Avec une documentation interactive automatique.
  • BasĂ© sur des normes : basĂ© sur (et entiĂšrement compatible avec) les standards ouverts pour les APIs : OpenAPI (prĂ©cĂ©demment connu sous le nom de Swagger) et JSON Schema.

* estimation basée sur des tests d'une équipe de développement interne, construisant des applications de production.

Sponsors

Sponsor clé de voûte

Sponsors Or et Argent

Autres sponsors

Opinions

« [...] J'utilise beaucoup FastAPI ces derniers temps. [...] Je prĂ©vois de l'utiliser dans mon Ă©quipe pour tous les services de ML chez Microsoft. Certains d'entre eux sont intĂ©grĂ©s au cƓur de Windows et Ă  certains produits Office. »

Kabir Khan - Microsoft (ref)

« Nous avons adoptĂ© la bibliothĂšque FastAPI pour crĂ©er un serveur REST qui peut ĂȘtre interrogĂ© pour obtenir des prĂ©dictions. [pour Ludwig] »

Piero Molino, Yaroslav Dudin, et Sai Sumanth Miryala - Uber (ref)

« Netflix est heureux d'annoncer la publication en open source de notre framework d'orchestration de gestion de crise : Dispatch ! [construit avec FastAPI] »

Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)

« Je suis plus qu'enthousiaste à propos de FastAPI. C'est tellement fun ! »

Brian Okken - Animateur du podcast Python Bytes (ref)

« HonnĂȘtement, ce que vous avez construit a l'air super solide et soignĂ©. À bien des Ă©gards, c'est ce que je voulais que Hug soit — c'est vraiment inspirant de voir quelqu'un construire ça. »

Timothy Crosley - Créateur de Hug (ref)

« Si vous cherchez à apprendre un framework moderne pour créer des APIs REST, regardez FastAPI [...] C'est rapide, facile à utiliser et facile à apprendre [...] »

« Nous sommes passés à FastAPI pour nos APIs [...] Je pense que vous l'aimerez [...] »

Ines Montani - Matthew Honnibal - Fondateurs de Explosion AI - Créateurs de spaCy (ref) - (ref)

« Si quelqu'un cherche à construire une API Python de production, je recommande vivement FastAPI. Il est magnifiquement conçu, simple à utiliser et hautement scalable. Il est devenu un composant clé de notre stratégie de développement API-first et alimente de nombreuses automatisations et services tels que notre ingénieur TAC virtuel. »

Deon Pillsbury - Cisco (ref)

Mini documentaire FastAPI

Un mini documentaire FastAPI est sorti fin 2025, vous pouvez le regarder en ligne :

FastAPI Mini Documentary

Typer, le FastAPI des CLIs

Si vous construisez une application CLI Ă  utiliser dans un terminal au lieu d'une API web, regardez Typer.

Typer est le petit frĂšre de FastAPI. Et il est destinĂ© Ă  ĂȘtre le FastAPI des CLIs. ⌚ 🚀

Prérequis

FastAPI repose sur les épaules de géants :

Installation

Créez et activez un environnement virtuel puis installez FastAPI :

$ pip install "fastapi[standard]"

---> 100%

Remarque : Vous devez vous assurer de mettre « fastapi[standard] » entre guillemets pour garantir que cela fonctionne dans tous les terminaux.

Exemple

Créer

Créez un fichier main.py avec :

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
    return {"item_id": item_id, "q": q}
Ou utilisez async def...

Si votre code utilise async / await, utilisez async def :

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str | None = None):
    return {"item_id": item_id, "q": q}

Remarque :

Si vous ne savez pas, consultez la section « Vous ĂȘtes pressĂ©s ? » Ă  propos de async et await dans la documentation.

Lancer

Lancez le serveur avec :

$ fastapi dev main.py

 ╭────────── FastAPI CLI - Development mode ───────────╼
 │                                                     │
 │  Serving at: http://127.0.0.1:8000                  │
 │                                                     │
 │  API docs: http://127.0.0.1:8000/docs               │
 │                                                     │
 │  Running in development mode, for production use:   │
 │                                                     │
 │  fastapi run                                        │
 │                                                     │
 ╰─────────────────────────────────────────────────────╯

INFO:     Will watch for changes in these directories: ['/home/user/code/awesomeapp']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [2248755] using WatchFiles
INFO:     Started server process [2248757]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
À propos de la commande fastapi dev main.py...

La commande fastapi dev lit votre fichier main.py, détecte l'application FastAPI qu'il contient et lance un serveur avec Uvicorn.

Par défaut, fastapi dev démarre avec le rechargement automatique activé pour le développement local.

Vous pouvez en savoir plus dans la documentation de la CLI FastAPI.

Vérifier

Ouvrez votre navigateur Ă  l'adresse http://127.0.0.1:8000/items/5?q=somequery.

Vous verrez la réponse JSON :

{"item_id": 5, "q": "somequery"}

Vous avez déjà créé une API qui :

  • Reçoit des requĂȘtes HTTP sur les chemins / et /items/{item_id}.
  • Les deux chemins acceptent des opĂ©rations GET (Ă©galement connues sous le nom de mĂ©thodes HTTP).
  • Le chemin /items/{item_id} a un paramĂštre de chemin item_id qui doit ĂȘtre un int.
  • Le chemin /items/{item_id} a un paramĂštre de requĂȘte optionnel q de type str.

Documentation API interactive

Maintenant, rendez-vous sur http://127.0.0.1:8000/docs.

Vous verrez la documentation interactive automatique de l'API (fournie par Swagger UI) :

Swagger UI

Documentation API alternative

Et maintenant, rendez-vous sur http://127.0.0.1:8000/redoc.

Vous verrez la documentation alternative automatique (fournie par ReDoc) :

ReDoc

Mettre Ă  niveau l'exemple

Modifiez maintenant le fichier main.py pour recevoir un corps depuis une requĂȘte PUT.

Déclarez le corps en utilisant les types Python standard, grùce à Pydantic.

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    price: float
    is_offer: bool | None = None


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
    return {"item_id": item_id, "q": q}


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

Le serveur fastapi dev devrait se recharger automatiquement.

Mettre Ă  niveau la documentation API interactive

Maintenant, rendez-vous sur http://127.0.0.1:8000/docs.

  • La documentation interactive de l'API sera automatiquement mise Ă  jour, y compris le nouveau corps :

Swagger UI

  • Cliquez sur le bouton « Try it out », il vous permet de renseigner les paramĂštres et d'interagir directement avec l'API :

Swagger UI interaction

  • Cliquez ensuite sur le bouton « Execute », l'interface utilisateur communiquera avec votre API, enverra les paramĂštres, obtiendra les rĂ©sultats et les affichera Ă  l'Ă©cran :

Swagger UI interaction

Mettre Ă  niveau la documentation API alternative

Et maintenant, rendez-vous sur http://127.0.0.1:8000/redoc.

  • La documentation alternative reflĂštera Ă©galement le nouveau paramĂštre de requĂȘte et le nouveau corps :

ReDoc

En résumé

En résumé, vous déclarez une fois les types de paramÚtres, le corps, etc. en tant que paramÚtres de fonction.

Vous faites cela avec les types Python standard modernes.

Vous n'avez pas à apprendre une nouvelle syntaxe, les méthodes ou les classes d'une bibliothÚque spécifique, etc.

Juste du Python standard.

Par exemple, pour un int :

item_id: int

ou pour un modĂšle Item plus complexe :

item: Item

... et avec cette déclaration unique, vous obtenez :

  • Une assistance dans l'Ă©diteur, notamment :
    • l'autocomplĂ©tion.
    • la vĂ©rification des types.
  • La validation des donnĂ©es :
    • des erreurs automatiques et claires lorsque les donnĂ©es ne sont pas valides.
    • une validation mĂȘme pour les objets JSON profondĂ©ment imbriquĂ©s.
  • Conversion des donnĂ©es d'entrĂ©e : venant du rĂ©seau vers les donnĂ©es et types Python. Lecture depuis :
    • JSON.
    • ParamĂštres de chemin.
    • ParamĂštres de requĂȘte.
    • Cookies.
    • En-tĂȘtes.
    • Formulaires.
    • Fichiers.
  • Conversion des donnĂ©es de sortie : conversion des donnĂ©es et types Python en donnĂ©es rĂ©seau (au format JSON) :
    • Conversion des types Python (str, int, float, bool, list, etc).
    • Objets datetime.
    • Objets UUID.
    • ModĂšles de base de donnĂ©es.
    • ... et bien plus.
  • Documentation API interactive automatique, avec 2 interfaces utilisateur au choix :
    • Swagger UI.
    • ReDoc.

Pour revenir à l'exemple de code précédent, FastAPI va :

  • Valider la prĂ©sence d'un item_id dans le chemin pour les requĂȘtes GET et PUT.
  • Valider que item_id est de type int pour les requĂȘtes GET et PUT.
    • Si ce n'est pas le cas, le client verra une erreur utile et claire.
  • VĂ©rifier s'il existe un paramĂštre de requĂȘte optionnel nommĂ© q (comme dans http://127.0.0.1:8000/items/foo?q=somequery) pour les requĂȘtes GET.
    • Comme le paramĂštre q est dĂ©clarĂ© avec = None, il est optionnel.
    • Sans le None, il serait requis (comme l'est le corps dans le cas de PUT).
  • Pour les requĂȘtes PUT vers /items/{item_id}, lire le corps au format JSON :
    • VĂ©rifier qu'il a un attribut obligatoire name qui doit ĂȘtre un str.
    • VĂ©rifier qu'il a un attribut obligatoire price qui doit ĂȘtre un float.
    • VĂ©rifier qu'il a un attribut optionnel is_offer, qui doit ĂȘtre un bool, s'il est prĂ©sent.
    • Tout cela fonctionne Ă©galement pour les objets JSON profondĂ©ment imbriquĂ©s.
  • Convertir automatiquement depuis et vers JSON.
  • Tout documenter avec OpenAPI, qui peut ĂȘtre utilisĂ© par :
    • des systĂšmes de documentation interactive.
    • des systĂšmes de gĂ©nĂ©ration automatique de clients, pour de nombreux langages.
  • Fournir directement 2 interfaces web de documentation interactive.

Nous n'avons fait qu'effleurer la surface, mais vous avez déjà une idée de la façon dont tout fonctionne.

Essayez de changer la ligne contenant :

    return {"item_name": item.name, "item_id": item_id}

... de :

        ... "item_name": item.name ...

... Ă  :

        ... "item_price": item.price ...

... et voyez comment votre éditeur complÚte automatiquement les attributs et connaßt leurs types :

compatibilité éditeur

Pour un exemple plus complet comprenant plus de fonctionnalités, voir le Tutoriel - Guide utilisateur.

Alerte spoiler : le tutoriel - guide utilisateur inclut :

  • DĂ©claration de paramĂštres provenant d'autres emplacements comme : en-tĂȘtes, cookies, champs de formulaire et fichiers.
  • Comment dĂ©finir des contraintes de validation comme maximum_length ou regex.
  • Un systĂšme d'injection de dĂ©pendances trĂšs puissant et facile Ă  utiliser.
  • SĂ©curitĂ© et authentification, y compris la prise en charge de OAuth2 avec des JWT tokens et l'authentification HTTP Basic.
  • Des techniques plus avancĂ©es (mais tout aussi faciles) pour dĂ©clarer des modĂšles JSON profondĂ©ment imbriquĂ©s (grĂące Ă  Pydantic).
  • IntĂ©gration GraphQL avec Strawberry et d'autres bibliothĂšques.
  • De nombreuses fonctionnalitĂ©s supplĂ©mentaires (grĂące Ă  Starlette) comme :
    • WebSockets
    • des tests extrĂȘmement faciles basĂ©s sur HTTPX et pytest
    • CORS
    • Cookie Sessions
    • ... et plus encore.

Déployer votre application (optionnel)

Vous pouvez, si vous le souhaitez, dĂ©ployer votre application FastAPI sur FastAPI Cloud, allez vous inscrire sur la liste d'attente si ce n'est pas dĂ©jĂ  fait. 🚀

Si vous avez dĂ©jĂ  un compte FastAPI Cloud (nous vous avons invitĂ© depuis la liste d'attente 😉), vous pouvez dĂ©ployer votre application avec une seule commande.

Avant de dĂ©ployer, assurez-vous d'ĂȘtre connectĂ© :

$ fastapi login

You are logged in to FastAPI Cloud 🚀

Puis déployez votre application :

$ fastapi deploy

Deploying to FastAPI Cloud...

✅ Deployment successful!

🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev

C'est tout ! Vous pouvez maintenant accĂ©der Ă  votre application Ă  cette URL. ✹

À propos de FastAPI Cloud

FastAPI Cloud est construit par le mĂȘme auteur et la mĂȘme Ă©quipe derriĂšre FastAPI.

Il simplifie le processus de construction, de déploiement et d'accÚs à une API avec un effort minimal.

Il apporte la mĂȘme expĂ©rience dĂ©veloppeur de la crĂ©ation d'applications avec FastAPI au dĂ©ploiement dans le cloud. 🎉

FastAPI Cloud est le principal sponsor et financeur des projets open source FastAPI and friends. ✹

Déployer sur d'autres fournisseurs cloud

FastAPI est open source et basé sur des standards. Vous pouvez déployer des applications FastAPI sur n'importe quel fournisseur cloud de votre choix.

Suivez les guides de votre fournisseur cloud pour y dĂ©ployer des applications FastAPI. đŸ€“

Performance

Les benchmarks TechEmpower indĂ©pendants montrent que les applications FastAPI s'exĂ©cutant sous Uvicorn sont parmi les frameworks Python les plus rapides, juste derriĂšre Starlette et Uvicorn eux-mĂȘmes (utilisĂ©s en interne par FastAPI). (*)

Pour en savoir plus, consultez la section Benchmarks.

Dépendances

FastAPI dépend de Pydantic et Starlette.

Dépendances standard

Lorsque vous installez FastAPI avec pip install "fastapi[standard]", il inclut le groupe standard de dépendances optionnelles :

Utilisées par Pydantic :

Utilisées par Starlette :

  • httpx - Obligatoire si vous souhaitez utiliser le TestClient.
  • jinja2 - Obligatoire si vous souhaitez utiliser la configuration de template par dĂ©faut.
  • python-multipart - Obligatoire si vous souhaitez prendre en charge l’« parsing » de formulaires avec request.form().

Utilisées par FastAPI :

  • uvicorn - pour le serveur qui charge et sert votre application. Cela inclut uvicorn[standard], qui comprend certaines dĂ©pendances (par ex. uvloop) nĂ©cessaires pour une haute performance.
  • fastapi-cli[standard] - pour fournir la commande fastapi.
    • Cela inclut fastapi-cloud-cli, qui vous permet de dĂ©ployer votre application FastAPI sur FastAPI Cloud.

Sans les dépendances standard

Si vous ne souhaitez pas inclure les dépendances optionnelles standard, vous pouvez installer avec pip install fastapi au lieu de pip install "fastapi[standard]".

Sans fastapi-cloud-cli

Si vous souhaitez installer FastAPI avec les dépendances standard mais sans fastapi-cloud-cli, vous pouvez installer avec pip install "fastapi[standard-no-fastapi-cloud-cli]".

Dépendances optionnelles supplémentaires

Il existe des dépendances supplémentaires que vous pourriez vouloir installer.

Dépendances optionnelles supplémentaires pour Pydantic :

Dépendances optionnelles supplémentaires pour FastAPI :

  • orjson - Obligatoire si vous souhaitez utiliser ORJSONResponse.
  • ujson - Obligatoire si vous souhaitez utiliser UJSONResponse.

Licence

Ce projet est soumis aux termes de la licence MIT.