Revision sheet: Fondamentaux de FastAPI

Plan du Cours

  1. Présentation et choix de FastAPI
  2. Projet et prérequis du cours
  3. CrĂ©ation d’une premiĂšre application
  4. Exécution et documentation automatique
  5. ParamÚtres et validation des données
  6. Débogage et gestion des erreurs
  7. Fonctions synchrones et asynchrones
  8. Données automobiles et filtrage
  9. ParamĂštres de requĂȘte et de chemin
  10. ModĂšles Pydantic et validation
  11. Chargement et sauvegarde JSON
  12. Méthodes HTTP REST
  13. SchĂ©mas d’entrĂ©e et de sortie
  14. Opérations et données imbriquées

1. Présentation et choix de FastAPI

Notions clés & Définitions

  • FastAPI : Un framework web moderne et performant destinĂ© Ă  construire des API Ă  partir des annotations de type standard de Python.

★ À maütriser

  • FastAPI utilise fortement les annotations de type pour valider et convertir automatiquement les donnĂ©es, gĂ©nĂ©rer la documentation des opĂ©rations et produire du code concis et performant.

📌 Django est un framework mature et complet principalement conçu pour les sites web, tandis que Flask est un microframework fournissant trĂšs peu de fonctionnalitĂ©s sans extensions.

Compléments

📌 FastAPI est un choix adaptĂ© pour crĂ©er uniquement une API REST, tandis que Django avec django-rest-framework convient mieux lorsqu’une API fait partie d’un site web complet.

2. Projet et prérequis du cours

★ À maütriser

  • Le projet du cours construit une API REST pour une application d’autopartage permettant notamment de crĂ©er, modifier et supprimer des voitures et d’ajouter des trajets.

📌 Pour suivre le cours, il faut connaütre les bases de Python, notamment les fonctions, les classes, les dictionnaires et les listes, ainsi que les notions essentielles de HTTP, des API REST et des bases relationnelles.

Compléments

  • Les donnĂ©es du projet sont stockĂ©es dans une base de donnĂ©es au moyen de modĂšles Ă©crits avec la bibliothĂšque SQLModel.

  • Le cours aborde OAuth, le service de pages HTML, le traitement des formulaires HTML, les cookies, les en-tĂȘtes, le middleware, les tests unitaires et le dĂ©ploiement.

  • FastAPI ne prend pas en charge les versions de Python antĂ©rieures Ă  3.8 et le travail pratique nĂ©cessite un Ă©diteur de code tel que PyCharm ou Visual Studio Code.

3. CrĂ©ation d’une premiĂšre application

Notions clés & Définitions

  • Objet FastAPI : L’objet créé par l’appel au constructeur FastAPI reprĂ©sente l’application ou le serveur REST construit par le projet.
  • OpĂ©ration de chemin : Une fonction associĂ©e Ă  une URL et Ă  une mĂ©thode HTTP au moyen d’un dĂ©corateur tel que @app.get.

Points essentiels

  • La crĂ©ation d’un projet FastAPI consiste Ă  crĂ©er un environnement virtuel, installer FastAPI avec ses dĂ©pendances, crĂ©er un fichier Python et instancier un objet FastAPI dans ce fichier.

  • L’installation complĂšte s’effectue avec la commande python −m pip install "fastapi[all]"python\ -m\ pip\ install\ "fastapi[all]".

4. Exécution et documentation automatique

★ À maütriser

  • Le lancement en dĂ©veloppement s’effectue avec la commande fastapi dev carsharing.pyfastapi\ dev\ carsharing.py, qui recharge automatiquement l’application lorsque le code change.

📌 En production, il faut utiliser fastapi run carsharing.pyfastapi\ run\ carsharing.py plutĂŽt que le mode dev, notamment pour des raisons de sĂ©curitĂ© et de performance.

  • FastAPI ajoute automatiquement la documentation interactive Ă  l’URL /docs, une autre prĂ©sentation Ă  /redoc et la spĂ©cification OpenAPI lisible par machine Ă  /openapi.json.

  • Lorsqu’une requĂȘte HTTP arrive, Uvicorn la reçoit, FastAPI recherche l’opĂ©ration associĂ©e au chemin et Ă  la mĂ©thode, exĂ©cute la fonction puis renvoie sa valeur au client.

Compléments

  • La page /docs permet d’exĂ©cuter une opĂ©ration avec « Try it out », et l’opĂ©ration d’accueil renvoie actuellement le statut HTTP 200 lorsque son exĂ©cution rĂ©ussit.

5. ParamÚtres et validation des données

Notions clés & Définitions

  • ParamĂštre de requĂȘte : Une valeur transmise dans l’URL aprĂšs un point d’interrogation, par exemple name dans /?name=reindart.
  • ParamĂštre de chemin : Une valeur intĂ©grĂ©e Ă  l’URL entre accolades dans le dĂ©corateur, par exemple {id} dans /api/cars/{id}.

★ À maütriser

  • Les paramĂštres de requĂȘte sont obligatoires par dĂ©faut, mais une valeur par dĂ©faut comme None permet de les rendre optionnels.

  • FastAPI utilise les annotations de type pour convertir les valeurs textuelles reçues dans l’URL vers le type attendu et vĂ©rifier que la conversion est valide.

Compléments

  • Lorsqu’un paramĂštre optionnel peut ĂȘtre une chaĂźne ou None, son annotation peut utiliser l’opĂ©rateur pipe, comme str | None, et un paramĂštre entier optionnel peut utiliser int | None.

  • Les annotations de type des paramĂštres sont Ă©galement visibles dans la documentation gĂ©nĂ©rĂ©e et dans la spĂ©cification openapi.json.

Astuce mémo

Query aprùs ?, path dans l’URL

6. Débogage et gestion des erreurs

Points essentiels

  • Dans PyCharm ou Visual Studio Code, un point d’arrĂȘt suspend l’exĂ©cution sur une ligne afin d’inspecter les variables, puis Step Over exĂ©cute une seule ligne avant de suspendre Ă  nouveau.

  • Sans annotation int, l’identifiant reçu depuis l’URL est une chaĂźne, tandis que les identifiants stockĂ©s dans les donnĂ©es automobiles sont des entiers, ce qui rend la comparaison toujours fausse.

7. Fonctions synchrones et asynchrones

★ À maütriser

📌 Une opĂ©ration de chemin doit ĂȘtre dĂ©clarĂ©e avec async def lorsqu’elle utilise une bibliothĂšque tierce dont les appels nĂ©cessitent await.

📌 Une opĂ©ration utilisant une bibliothĂšque de communication sans support asynchrone, comme SQLModel dans le cours, doit gĂ©nĂ©ralement ĂȘtre dĂ©clarĂ©e avec def.

Compléments

📌 Si l’on ne sait pas quelle forme choisir, il est recommandĂ© d’utiliser une fonction normale avec def, et FastAPI peut mĂ©langer des fonctions def et async def dans une mĂȘme application.

Astuce mémo

await implique async, sinon def

8. Données automobiles et filtrage

Points essentiels

  • Les premiĂšres donnĂ©es automobiles sont simulĂ©es par une liste de dictionnaires, chaque dictionnaire reprĂ©sentant une voiture avec notamment sa taille, son type d’énergie, son nombre de portes et sa transmission.

  • L’opĂ©ration GET /api/cars renvoie l’ensemble des voitures disponibles dans la liste de donnĂ©es.

  • Le filtrage des voitures commence avec toute la liste, applique le filtre de taille s, m ou l lorsqu’il est fourni, puis applique Ă©ventuellement le filtre du nombre de portes.

  • Les valeurs reçues depuis une URL sont textuelles, mĂȘme lorsqu’elles reprĂ©sentent un nombre, ce qui nĂ©cessite une annotation int pour comparer correctement le nombre de portes ou l’identifiant d’une voiture.

9. ParamĂštres de requĂȘte et de chemin

★ À maütriser

  • Un paramĂštre de requĂȘte est gĂ©nĂ©ralement obligatoire mais peut devenir optionnel grĂące Ă  une valeur par dĂ©faut, tandis qu’un paramĂštre de chemin ne peut pas ĂȘtre optionnel car il fait partie du motif de l’URL.

  • Pour une requĂȘte vers /api/cars/5, FastAPI recherche le motif correspondant, extrait la valeur 5 de l’URL et la transmet au paramĂštre de chemin id aprĂšs conversion et validation selon son annotation de type.

📌 Lorsqu’une voiture correspondant Ă  l’identifiant demandĂ© n’existe pas, l’opĂ©ration doit lever une HTTPException avec le statut 404 et peut fournir un message dĂ©taillĂ©.

Compléments

  • Pour autoriser une valeur absente en Python 3.10 ou plus rĂ©cent, un champ peut ĂȘtre typĂ© comme une union, par exemple size:str∣Nonesize : str \mid None ou doors:int∣Nonedoors : int \mid None, avec une valeur par dĂ©faut de None.

10. ModĂšles Pydantic et validation

Notions clés & Définitions

  • ModĂšle Pydantic : Une classe qui hĂ©rite de BaseModel et dont les attributs dĂ©clarent les champs, les types et les valeurs par dĂ©faut d’une structure de donnĂ©es valide.

★ À maütriser

📌 Un champ Pydantic est obligatoire lorsqu’il n’a pas de valeur par dĂ©faut, tandis qu’une valeur par dĂ©faut le rend facultatif lors de la construction de l’objet.

  • Pydantic convertit automatiquement une valeur vers le type dĂ©clarĂ© lorsqu’une conversion est possible, par exemple les chaĂźnes reprĂ©sentant des nombres vers des entiers, et produit une erreur de validation si la conversion Ă©choue.

Compléments

  • La crĂ©ation d’un objet Pydantic Ă  partir d’arguments nommĂ©s fournit automatiquement un constructeur, vĂ©rifie les champs obligatoires et prĂ©pare un objet imprimable.

  • Les modĂšles Pydantic peuvent fournir des utilitaires pour convertir les objets en JSON, en dictionnaires ou en chaĂźnes, en plus de leur construction et validation.

11. Chargement et sauvegarde JSON

★ À maütriser

  • La fonction load_db ouvre cars.json, charge une liste de dictionnaires avec json.load, puis transforme chaque dictionnaire en objet Car grĂące Ă  Car.model_validate.

  • La fonction save_db ouvre cars.json en Ă©criture, convertit chaque objet en dictionnaire, puis Ă©crit la liste avec json.dump et indent=4 pour obtenir un fichier lisible.

Compléments

📌 Un fichier JSON doit utiliser des chaĂźnes entre guillemets doubles et ne doit pas contenir de virgule finale, mĂȘme si les chaĂźnes entre guillemets simples et certaines virgules finales sont acceptĂ©es en Python.

  • Le stockage direct des objets dans un fichier JSON constitue une simulation simple de base de donnĂ©es et n’est pas considĂ©rĂ© comme une solution fiable pour la production.

  • Au dĂ©marrage de l’application, l’appel Ă  load_db aprĂšs son import recharge les voitures du fichier JSON dans la structure utilisĂ©e par FastAPI.

Astuce mémo

JSON → dictionnaires → objets ; objets → dictionnaires → JSON

12. Méthodes HTTP REST

Points essentiels

  • GET sert Ă  rĂ©cupĂ©rer une ressource sans effet de bord, POST sert gĂ©nĂ©ralement Ă  crĂ©er une ressource dans une collection, PUT sert Ă  modifier une ressource identifiĂ©e et DELETE sert Ă  la supprimer.

  • Pour crĂ©er une voiture avec POST, le client envoie les donnĂ©es dans le corps de la requĂȘte vers l’URL de la collection /api/cars, et la ressource reçoit ensuite sa propre URL.

  • Pour modifier une voiture avec PUT, le client utilise l’URL de cette voiture avec son identifiant et envoie les nouvelles donnĂ©es dans le corps de la requĂȘte.

  • Une suppression rĂ©ussie peut renvoyer le statut 204 No Content avec un corps vide, tandis qu’une voiture inexistante entraĂźne une HTTPException de statut 404.

13. SchĂ©mas d’entrĂ©e et de sortie

★ À maütriser

  • Un modĂšle d’entrĂ©e dĂ©crit les donnĂ©es que le client peut envoyer, tandis qu’un modĂšle de sortie dĂ©crit les donnĂ©es que l’API renvoie au client.

  • CarOutput hĂ©rite de CarInput et ajoute le champ id, de sorte que CarInput reprĂ©sente une voiture sans identifiant fourni par le client et CarOutput une voiture enregistrĂ©e avec identifiant.

  • Dans l’opĂ©ration POST de crĂ©ation, FastAPI construit un objet CarInput depuis le corps JSON, puis l’application crĂ©e un CarOutput avec un nouvel identifiant, l’enregistre et le renvoie.

  • L’utilisation d’un modĂšle Pydantic comme argument d’opĂ©ration indique Ă  FastAPI de lire cet objet dans le corps de la requĂȘte et d’en valider la structure avant d’appeler la fonction.

Compléments

  • Des modĂšles d’entrĂ©e et de sortie distincts Ă©vitent d’exposer accidentellement des champs stockĂ©s en base mais qui ne doivent pas ĂȘtre transmis, comme des informations sensibles.

Astuce mémo

Input sans identifiant, Output avec identifiant

14. Opérations et données imbriquées

★ À maütriser

  • Une opĂ©ration DELETE recherche la voiture par identifiant, la retire de la base si elle existe, sauvegarde les donnĂ©es et renvoie gĂ©nĂ©ralement le statut 204 sans contenu.

  • Une opĂ©ration PUT reçoit l’identifiant depuis le chemin et les nouvelles propriĂ©tĂ©s depuis le corps, remplace les champs de la voiture trouvĂ©e sans modifier son identifiant, sauvegarde puis renvoie l’objet mis Ă  jour.

  • Un modĂšle Pydantic peut contenir une liste d’un autre modĂšle, comme une voiture contenant une liste de trajets, et FastAPI sĂ©rialise automatiquement cette structure imbriquĂ©e dans les requĂȘtes et rĂ©ponses.

Compléments

  • Postman peut importer le fichier openapi.json gĂ©nĂ©rĂ© par FastAPI et reconnaĂźtre automatiquement les opĂ©rations GET, POST, PUT et DELETE ainsi que leurs paramĂštres et corps de requĂȘte.

  • Pour ajouter un trajet Ă  une voiture, l’API reçoit l’identifiant de la voiture en paramĂštre de requĂȘte et les donnĂ©es du trajet dans le corps, crĂ©e le trajet avec un identifiant, l’ajoute Ă  la liste, sauvegarde et renvoie le trajet créé.

Tableaux de synthĂšse

Comparaison des frameworks Python

FrameworkOrientationAtouts et limites
FastAPIAPI RESTAnnotations de type, validation, conversion, documentation automatique et hautes performances
DjangoSites web completsFramework mature et riche, mais ses fonctionnalités supplémentaires aident moins directement à créer une API
FlaskPetits projets webMicroframework minimal nécessitant souvent du code ou des extensions supplémentaires pour les API REST

Méthodes HTTP du service

MéthodeCibleRÎleRéponse typique
GETRessource ou collectionLire sans modifierDonnées de la ressource
POSTCollectionCréer une ressourceRessource créée
PUTRessource identifiéeModifier une ressourceRessource mise à jour
DELETERessource identifiéeSupprimer une ressource204 No Content

Test your knowledge

Test your knowledge on Fondamentaux de FastAPI with 44 multiple-choice questions with detailed corrections.

1. Quel type de logiciel FastAPI permet-il principalement de construire ?

2. Quel rĂŽle les annotations de type jouent-elles fortement dans FastAPI ?

Take the quiz →

Review with flashcards

Memorize the key concepts of Fondamentaux de FastAPI with 73 interactive flashcards.

Qu'est-ce que FastAPI ?

Un framework web moderne et performant pour construire des API avec les annotations de type Python.

Comment FastAPI utilise-t-il les annotations de type ?

Pour valider, convertir les données, générer la documentation et produire du code performant.

Quelle est la différence principale entre Django et Flask ?

Django est mature et complet, Flask est un microframework minimaliste.

See flashcards →

Similar courses

Create your own revision sheets

Import your course and AI generates sheets, quizzes and flashcards in 30 seconds.

Sheet generator