â Ă maĂźtriser
đ 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.
â Ă maĂźtriser
đ 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.
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 .
â Ă maĂźtriser
đ En production, il faut utiliser 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
â Ă 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.
Query aprĂšs ?, path dans lâURL
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.
â Ă 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.
await implique async, sinon def
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.
â Ă 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
â Ă 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.
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.
â Ă 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.
JSON â dictionnaires â objets ; objets â dictionnaires â JSON
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.
â Ă 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
Input sans identifiant, Output avec identifiant
â Ă 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éé.
| Framework | Orientation | Atouts et limites |
|---|---|---|
| FastAPI | API REST | Annotations de type, validation, conversion, documentation automatique et hautes performances |
| Django | Sites web complets | Framework mature et riche, mais ses fonctionnalités supplémentaires aident moins directement à créer une API |
| Flask | Petits projets web | Microframework minimal nécessitant souvent du code ou des extensions supplémentaires pour les API REST |
| Méthode | Cible | RÎle | Réponse typique |
|---|---|---|---|
| GET | Ressource ou collection | Lire sans modifier | Données de la ressource |
| POST | Collection | Créer une ressource | Ressource créée |
| PUT | Ressource identifiée | Modifier une ressource | Ressource mise à jour |
| DELETE | Ressource identifiée | Supprimer une ressource | 204 No Content |
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 ?
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.
Import your course and AI generates sheets, quizzes and flashcards in 30 seconds.
Sheet generator