{"id":63995,"date":"2022-11-29T13:08:00","date_gmt":"2022-11-29T12:08:00","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=63995&#038;preview=true&#038;preview_id=63995"},"modified":"2024-09-19T09:40:40","modified_gmt":"2024-09-19T08:40:40","slug":"fastapi","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/","title":{"rendered":"Cr\u00e9er une application avec FastAPI pour Python"},"content":{"rendered":"<p>FastAPI est un framework web rapide et l\u00e9ger pour construire des interfaces de programmation d&rsquo;applications modernes en utilisant <a href=\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/\">Python<\/a> 3.6 et plus. Dans ce tutoriel, nous allons parcourir les bases de la cr\u00e9ation d&rsquo;une application avec FastAPI, et vous comprendrez pourquoi il a \u00e9t\u00e9 d\u00e9sign\u00e9 comme l&rsquo;un des <a href=\"https:\/\/www.infoworld.com\/article\/3637038\/the-best-open-source-software-of-2021.html#slide5\" target=\"_blank\" rel=\"noopener noreferrer\">meilleurs frameworks open source de 2021<\/a>.<\/p>\n<p>Une fois que vous serez pr\u00eat \u00e0 d\u00e9velopper vos propres applications FastAPI, vous n&rsquo;aurez pas \u00e0 chercher bien loin pour trouver un endroit o\u00f9 les h\u00e9berger. Les services d&rsquo;<a href=\"https:\/\/sevalla.com\/application-hosting\/\">h\u00e9bergement d&rsquo;applications<\/a> et <a href=\"https:\/\/sevalla.com\/database-hosting\/\">d&rsquo;h\u00e9bergement de bases de donn\u00e9es<\/a> de Kinsta fournissent une plateforme en tant que service qui est forte en Python.<\/p>\n<p>Commen\u00e7ons par apprendre les bases.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Avantages de FastAPI<\/h2>\n<p>Vous trouverez ci-dessous quelques-uns des avantages que le <a href=\"https:\/\/fastapi.tiangolo.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">framework FastAPI<\/a> apporte \u00e0 un projet.<\/p>\n<ul>\n<li><strong>Rapidit\u00e9 :<\/strong> Comme son nom l&rsquo;indique, FastAPI est un framework tr\u00e8s rapide. Sa vitesse est comparable \u00e0 celle de <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Go<\/a> et <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Node.js<\/a>, qui sont g\u00e9n\u00e9ralement consid\u00e9r\u00e9s comme faisant partie des options les plus rapides pour la cr\u00e9ation d&rsquo;API.<\/li>\n<li><strong>Facile \u00e0 apprendre et \u00e0 coder :<\/strong> FastAPI a d\u00e9j\u00e0 pr\u00e9vu presque tout ce dont vous aurez besoin pour cr\u00e9er une API pr\u00eate \u00e0 la production. En tant que d\u00e9veloppeur utilisant FastAPI, vous n&rsquo;avez pas besoin de tout coder \u00e0 partir de z\u00e9ro. Avec seulement quelques lignes de code, vous pouvez avoir une API RESTful pr\u00eate \u00e0 \u00eatre d\u00e9ploy\u00e9e.<\/li>\n<li><strong>Une documentation compl\u00e8te :<\/strong> FastAPI utilise les normes de documentation OpenAPI, ainsi la documentation peut \u00eatre g\u00e9n\u00e9r\u00e9e dynamiquement. Cette documentation fournit des informations d\u00e9taill\u00e9es sur les points de terminaison, les r\u00e9ponses, les param\u00e8tres et les codes de retour de FastAPI.<\/li>\n<li><strong>Des API avec moins de bugs :<\/strong> FastAPI supporte la <a href=\"https:\/\/fastapi.tiangolo.com\/tutorial\/query-params-str-validations\/#add-more-validations\" target=\"_blank\" rel=\"noopener noreferrer\">validation personnalis\u00e9e des donn\u00e9es<\/a>, ce qui permet aux d\u00e9veloppeurs de construire des API avec moins de bugs. Les d\u00e9veloppeurs de FastAPI se vantent que le framework entra\u00eene moins de bugs d&rsquo;origine humaine &#8211; jusqu&rsquo;\u00e0 40 % de moins.<\/li>\n<li><strong>Indices de type :<\/strong> Le module types a \u00e9t\u00e9 introduit dans Python 3.5. Il vous permet de d\u00e9clarer le <code>type<\/code> d&rsquo;une variable. Lorsque le type d&rsquo;une variable est d\u00e9clar\u00e9, les IDE sont en mesure de fournir un meilleur support et de pr\u00e9dire les erreurs avec plus de pr\u00e9cision.<\/li>\n<\/ul>\n\n<h2>Comment d\u00e9marrer avec FastAPI<\/h2>\n<p>Pour suivre ce tutoriel et d\u00e9marrer avec FastAPI, vous devrez d&rsquo;abord faire quelques petites choses.<\/p>\n<p>Assurez-vous que vous avez un \u00e9diteur de texte\/IDE de programmeur, tel que <a href=\"https:\/\/code.visualstudio.com\/download\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code<\/a>. D&rsquo;autres options incluent <a href=\"https:\/\/kinsta.com\/fr\/blog\/comment-utiliser-sublime-text\/\" rel=\"noopener\">Sublime Text<\/a> et <a href=\"https:\/\/www.espressoapp.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Espresso<\/a>.<\/p>\n<p>Il est courant de faire tourner vos applications Python et leurs instances dans des environnements virtuels. Les environnements virtuels permettent d&rsquo;ex\u00e9cuter simultan\u00e9ment diff\u00e9rents ensembles de paquets et configurations, et d&rsquo;\u00e9viter les conflits dus \u00e0 des versions de paquets incompatibles.<\/p>\n<p>Pour cr\u00e9er un environnement virtuel, ouvrez <a href=\"https:\/\/kinsta.com\/fr\/blog\/commandes-python\/#introduction-to-the-cli\">votre terminal<\/a> et ex\u00e9cutez cette commande :<\/p>\n<pre><code class=\"language-bash\">$ python3 -m venv env<\/code><\/pre>\n<p>Vous devrez \u00e9galement activer l&rsquo;environnement virtuel. La commande pour cela variera en fonction du syst\u00e8me d&rsquo;exploitation et du shell que vous utilisez. Voici quelques exemples d&rsquo;activation CLI pour un certain nombre d&rsquo;environnements :<\/p>\n<pre><code class=\"language-bash\"># On Unix or MacOS (bash shell): \n\/path\/to\/venv\/bin\/activate\n\n# On Unix or MacOS (csh shell):\n\/path\/to\/venv\/bin\/activate.csh\n\n# On Unix or MacOS (fish shell):\n\/path\/to\/venv\/bin\/activate.fish\n\n# On Windows (command prompt):\npathtovenvScriptsactivate.bat\n\n# On Windows (PowerShell):\npathtovenvScriptsActivate.ps1\n<\/code><\/pre>\n<p>(Certains IDE sensibles \u00e0 Python peuvent \u00e9galement \u00eatre configur\u00e9s pour activer l&rsquo;environnement virtuel actuel.)<\/p>\n<p>Maintenant, installez FastAPI :<\/p>\n<pre><code class=\"language-bash\">$ pip3 install fastapi<\/code><\/pre>\n<p>FastAPI est un framework pour construire des API, mais pour tester vos API vous aurez besoin d&rsquo;un serveur web local. <a href=\"https:\/\/www.uvicorn.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Uvicorn<\/a> est un serveur web ASGI (Asynchronous Server Gateway Interface) rapide comme l&rsquo;\u00e9clair pour Python qui est id\u00e9al pour le d\u00e9veloppement. Pour installer Uvicorn, ex\u00e9cutez cette commande :<\/p>\n<pre><code class=\"language-bash\">$ pip3 install \"uvicorn[standard]\"<\/code><\/pre>\n<p>Une fois l&rsquo;installation r\u00e9ussie, cr\u00e9ez un fichier nomm\u00e9 <strong>main.py<\/strong> dans le r\u00e9pertoire de travail de votre projet. Ce fichier sera le point d&rsquo;entr\u00e9e de votre application.<\/p>\n<figure style=\"width: 1151px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-project-layout.png\" alt=\"Vue d'un projet FastAPI de base dans un IDE.\" width=\"1151\" height=\"475\"><figcaption class=\"wp-caption-text\">Vue d&rsquo;un projet FastAPI de base dans un IDE.<\/figcaption><\/figure>\n<h3>Un exemple rapide de FastAPI<\/h3>\n<p>Vous allez tester votre installation FastAPI en mettant rapidement en place un exemple de point de terminaison. Dans votre fichier <strong>main.py<\/strong>, collez le code suivant, puis enregistrez le fichier :<\/p>\n<pre><code class=\"language-python\"># main.py\nfrom fastapi import FastAPI\napp = FastAPI()\n@app.get(\"\/\")\nasync def root():\n return {\"greeting\":\"Hello world\"}\n<\/code><\/pre>\n<p>Le code ci-dessus cr\u00e9e un point de terminaison FastAPI basique. Vous trouverez ci-dessous un r\u00e9sum\u00e9 de ce que fait chaque ligne :<\/p>\n<ul>\n<li><code>from fastapi import FastAPI<\/code> : La fonctionnalit\u00e9 de votre API est fournie par la classe Python FastAPI.<\/li>\n<li><code>app = FastAPI()<\/code> : Ceci cr\u00e9e une instance FastAPI.<\/li>\n<li><code>@app.get(\"\/\")<\/code> : Ceci est un d\u00e9corateur python qui sp\u00e9cifie \u00e0 FastAPI que la fonction en dessous de lui est en charge de la gestion des requ\u00eates.<\/li>\n<li><code>@app.get(\"\/\")<\/code> : Ceci est un d\u00e9corateur qui sp\u00e9cifie la route. Cela cr\u00e9e une m\u00e9thode <code>GET<\/code> sur la route du site. Le r\u00e9sultat est ensuite renvoy\u00e9 par la fonction envelopp\u00e9e.<\/li>\n<li>D&rsquo;autres op\u00e9rations possibles utilis\u00e9es pour communiquer incluent <code>@app.post()<\/code>, <code>@app.put()<\/code>, <code>@app.delete()<\/code>, <code>@app.options()<\/code>, <code>@app.head()<\/code>, <code>@app.patch()<\/code> et <code>@app.trace()<\/code>.<\/li>\n<\/ul>\n<p>Dans le r\u00e9pertoire des fichiers, ex\u00e9cutez la commande suivante dans votre terminal pour d\u00e9marrer le serveur API :<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>Dans cette commande, <code>main<\/code> est le nom de votre module. L&rsquo;objet <code>app<\/code> est une instance de votre application, et est import\u00e9 dans le serveur ASGI. L&rsquo;indicateur <code>--reload<\/code> indique au serveur de se recharger automatiquement lorsque vous apportez des modifications.<\/p>\n<p>Vous devriez voir quelque chose comme ceci dans votre terminal :<\/p>\n<pre><code> $ uvicorn main:app --reload\nINFO: Will watch for changes in these directories: ['D:\\WEB DEV\\Eunit\\Tests\\fast-api']\nINFO: Uvicorn running on http:\/\/127.0.0.1:8000 (Press CTRL+C to quit)\nINFO: Started reloader process [26888] using WatchFiles\nINFO: Started server process [14956]\nINFO: Waiting for application startup.\nINFO: Application startup complete.\n<\/code><\/pre>\n<p>Dans votre navigateur, naviguez vers <code>http:\/\/localhost:8000<\/code> pour confirmer que votre API fonctionne. Vous devriez voir \u00ab\u00a0Hello\u00a0\u00bb : \u00ab\u00a0World\u00a0\u00bb comme un objet JSON sur la page. Ceci illustre \u00e0 quel point il est facile de cr\u00e9er une API avec FastAPI. Tout ce que vous aviez \u00e0 faire \u00e9tait de d\u00e9finir une route et de retourner votre dictionnaire Python, comme vu \u00e0 la ligne six du code ci-dessus.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-hello-world-in-browser.png\" alt=\"Application FastAPI Hello World dans un navigateur.\" width=\"900\" height=\"340\"><figcaption class=\"wp-caption-text\">Application FastAPI Hello World dans un navigateur.<\/figcaption><\/figure>\n<h3>Utilisation des indices de type<\/h3>\n<p>Si vous utilisez Python, vous avez l&rsquo;habitude d&rsquo;annoter les variables avec des types de donn\u00e9es de base tels que <code>int<\/code>, <code>str<\/code>, <code>float<\/code> et <code>bool<\/code>. Toutefois, \u00e0 partir de la version 3.9 de Python, des structures de donn\u00e9es avanc\u00e9es ont \u00e9t\u00e9 introduites. Cela vous permet de travailler avec des structures de donn\u00e9es telles que <code>dictionaries<\/code>, <code>tuples<\/code>, et <code>lists<\/code>. Avec les indications de type de FastAPI, vous pouvez structurer le sch\u00e9ma de vos donn\u00e9es en utilisant des mod\u00e8les <a href=\"https:\/\/pydantic-docs.helpmanual.io\/usage\/models\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantiques<\/a> et ensuite, utiliser les mod\u00e8les pydantiques pour faire des indications de type et b\u00e9n\u00e9ficier de la validation des donn\u00e9es qui est fournie.<\/p>\n<p>Dans l&rsquo;exemple ci-dessous, l&rsquo;utilisation des indications de type en Python est d\u00e9montr\u00e9e avec une simple calculatrice de prix de repas, <code>calculate_meal_fee<\/code> :<\/p>\n<pre><code class=\"language-python\">def calculate_meal_fee(beef_price: int, meal_price: int) -&gt; int:\n total_price: int = beef_price + meal_price\n return total_price\nprint(\"Calculated meal fee\", calculate_meal_fee(75, 19))\n<\/code><\/pre>\n<p>Notez que les indications de type ne changent pas la fa\u00e7on dont votre code s&rsquo;ex\u00e9cute.<\/p>\n<h3>Documentation interactive de l&rsquo;API FastAPI<\/h3>\n<p>FastAPI utilise <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\" target=\"_blank\" rel=\"noopener noreferrer\">Swagger UI<\/a> pour fournir une documentation API interactive automatique. Pour y acc\u00e9der, naviguez vers <code>http:\/\/localhost:8000\/docs<\/code> et vous verrez un \u00e9cran avec tous vos points de terminaison, m\u00e9thodes et sch\u00e9mas.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/swagger-ui-fastapi-documentation-interface.png\" alt=\"La documentation de Swagger UI pour FastAPI.\" width=\"900\" height=\"1013\"><figcaption class=\"wp-caption-text\">La documentation de Swagger UI pour FastAPI.<\/figcaption><\/figure>\n<p>Cette documentation automatique de l&rsquo;API bas\u00e9e sur le navigateur est fournie par FastAPI, et vous n&rsquo;avez rien d&rsquo;autre \u00e0 faire pour en profiter.<\/p>\n<p>Une autre documentation API bas\u00e9e sur le navigateur, \u00e9galement fournie par FastAPI, est <a href=\"https:\/\/github.com\/Redocly\/redoc\" target=\"_blank\" rel=\"noopener noreferrer\">Redoc<\/a>. Pour acc\u00e9der \u00e0 Redoc, naviguez sur <code>http:\/\/localhost:8000\/redoc<\/code>, o\u00f9 vous sera pr\u00e9sent\u00e9e une liste de vos points de terminaison, des m\u00e9thodes et de leurs r\u00e9ponses respectives.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/redoc-fastapi-documentation-interface.png\" alt=\"La documentation de Redoc pour FastAPI.\" width=\"900\" height=\"1112\"><figcaption class=\"wp-caption-text\">La documentation de Redoc pour FastAPI.<\/figcaption><\/figure>\n<h3>Configuration des routes dans FastAPI<\/h3>\n<p>Le d\u00e9corateur <code>@app<\/code> vous permet de sp\u00e9cifier la <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9thode<\/a> deroute, telle que <code>@app.get<\/code> ou <code>@app.post<\/code>, et supporte <code>GET<\/code>, <code>POST<\/code>, <code>PUT<\/code> et <code>DELETE<\/code>, ainsi que les options moins courantes, <code>HEAD<\/code>, <code>PATCH<\/code> et <code>TRACE<\/code>.<\/p>\n<h2>Construire votre application avec FastAPI<\/h2>\n<p>Dans ce tutoriel, vous serez guid\u00e9 dans la construction d&rsquo;une application <a href=\"https:\/\/www.codecademy.com\/article\/what-is-crud\" target=\"_blank\" rel=\"noopener noreferrer\">CRUD<\/a> avec FastAPI. L&rsquo;application sera capable de :<\/p>\n<ul>\n<li>Cr\u00e9er un utilisateur<\/li>\n<li>Lire l&rsquo;enregistrement d&rsquo;un utilisateur dans la base de donn\u00e9es<\/li>\n<li>Mettre \u00e0 jour un utilisateur existant<\/li>\n<li>Supprimer un utilisateur particulier<\/li>\n<\/ul>\n<p>Pour ex\u00e9cuter ces op\u00e9rations CRUD, vous cr\u00e9erez des m\u00e9thodes qui exposent les points de terminaison API. Le r\u00e9sultat sera une base de donn\u00e9es en m\u00e9moire qui peut stocker une liste d&rsquo;utilisateurs.<\/p>\n<figure style=\"width: 864px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/database-table-fastapi-crud-example.png\" alt=\"Structure de table de base de donn\u00e9es pour les exemples CRUD.\" width=\"864\" height=\"551\"><figcaption class=\"wp-caption-text\">Structure de table de base de donn\u00e9es pour les exemples CRUD.<\/figcaption><\/figure>\n<p>Vous utiliserez la biblioth\u00e8que <a href=\"https:\/\/pydantic-docs.helpmanual.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantic<\/a> pour effectuer la validation des donn\u00e9es et la gestion des r\u00e9glages en utilisant les annotations de type Python. Pour les besoins de ce tutoriel, vous d\u00e9clarerez la forme de vos donn\u00e9es comme des classes avec des attributs.<\/p>\n<p>Ce tutoriel utilisera la base de donn\u00e9es en m\u00e9moire. Ceci afin de vous permettre de commencer rapidement \u00e0 utiliser FastAPI pour construire vos API. Cependant, pour la production, vous pouvez utiliser n&rsquo;importe quelle base de donn\u00e9es de votre choix, comme <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-postgresql\/\">PostgreSQL<\/a>, <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mysql\/\">MySQL<\/a>, <a href=\"https:\/\/kinsta.com\/fr\/blog\/sqlite-vs-mysql\/#what-is-sqlite\">SQLite<\/a>, ou m\u00eame Oracle.<\/p>\n<h3>Construire l&rsquo;application<\/h3>\n<p>Vous commencerez par cr\u00e9er votre mod\u00e8le d&rsquo;utilisateur. Le mod\u00e8le utilisateur aura les attributs suivants :<\/p>\n<ul>\n<li><code>id<\/code> : Un identifiant unique universel (UUID)<\/li>\n<li><code>first_name<\/code> : Le pr\u00e9nom de l&rsquo;utilisateur<\/li>\n<li><code>last_name<\/code> : Le nom de famille de l&rsquo;utilisateur<\/li>\n<li><code>gender<\/code> : Le sexe de l&rsquo;utilisateur<\/li>\n<li><code>roles<\/code>qui est une liste contenant les r\u00f4les <code>admin<\/code> et <code>user<\/code><\/li>\n<\/ul>\n<p>Commencez par cr\u00e9er un nouveau fichier nomm\u00e9 <strong>models.py<\/strong> dans votre r\u00e9pertoire de travail, puis collez le code suivant dans <strong>models.py<\/strong> pour cr\u00e9er votre mod\u00e8le :<\/p>\n<pre><code class=\"language-python\">\n# models.py\nfrom typing import List, Optional\nfrom uuid import UUID, uuid4\nfrom pydantic import BaseModel\nfrom enum import Enum\nfrom pydantic import BaseModel\nclass Gender(str, Enum):\n male = \"male\"\n female = \"female\"\nclass Role(str, Enum):\n admin = \"admin\"\n user = \"user\"\nclass User(BaseModel):\n id: Optional[UUID] = uuid4()\n first_name: str\n last_name: str\n gender: Gender\n roles: List[Role]\n<\/code><\/pre>\n<p>Dans le code ci-dessus :<\/p>\n<ul>\n<li>Votre classe <code>User<\/code> \u00e9tend <code>BaseModel<\/code>, qui est ensuite import\u00e9e de <code>pydantic<\/code>.<\/li>\n<li>Vous avez d\u00e9fini les attributs de l&rsquo;utilisateur, comme indiqu\u00e9 ci-dessus.<\/li>\n<\/ul>\n<p>L&rsquo;\u00e9tape suivante consiste \u00e0 cr\u00e9er votre base de donn\u00e9es. Remplacez le contenu de votre fichier <strong>main.py<\/strong> par le code suivant :<\/p>\n<pre><code class=\"language-python\">\n# main.py\nfrom typing import List\nfrom uuid import uuid4\nfrom fastapi import FastAPI\nfrom models import Gender, Role, User\napp = FastAPI()\ndb: List[User] = [\n User(\n id=uuid4(),\n first_name=\"John\",\n last_name=\"Doe\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Jane\",\n last_name=\"Doe\",\n gender=Gender.female,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"James\",\n last_name=\"Gabriel\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Eunit\",\n last_name=\"Eunit\",\n gender=Gender.male,\n roles=[Role.admin, Role.user],\n ),\n]\n<\/code><\/pre>\n<p>Dans <strong>main.py <\/strong>:<\/p>\n<ul>\n<li>Vous avez initialis\u00e9 <code>db<\/code> avec un type de <code>List<\/code>, et transmis le mod\u00e8le <code>User<\/code><\/li>\n<li>Vous avez cr\u00e9\u00e9 une base de donn\u00e9es en m\u00e9moire avec quatre utilisateurs, chacun ayant les attributs requis tels que <code>first_name<\/code>, <code>last_name<\/code>, <code>gender<\/code> et <code>roles<\/code>. L&rsquo;utilisateur <code>Eunit<\/code> se voit attribuer les r\u00f4les de <code>admin<\/code> et <code>user<\/code>, tandis que les trois autres utilisateurs se voient attribuer uniquement le r\u00f4le de <code>user<\/code>.<\/li>\n<\/ul>\n<h3>Lire les enregistrements de la base de donn\u00e9es<\/h3>\n<p>Vous avez r\u00e9ussi \u00e0 configurer votre base de donn\u00e9es en m\u00e9moire et \u00e0 la remplir d&rsquo;utilisateurs. L&rsquo;\u00e9tape suivante consiste donc \u00e0 configurer un point de terminaison qui renverra une liste de tous les utilisateurs. C&rsquo;est l\u00e0 que FastAPI entre en jeu.<\/p>\n<p>Dans votre fichier <strong>main.py<\/strong>, collez le code suivant juste en dessous de votre point de terminaison <code>Hello World<\/code> :<\/p>\n<pre><code class=\"language-python\">\n# main.py\n @app.get(\"\/api\/v1\/users\")\n async def get_users():\n return db\n<\/code><\/pre>\n<p>Ce code d\u00e9finit le point de terminaison <code>\/api\/v1\/users<\/code>, et cr\u00e9e une fonction asynchrone, <code>get_users<\/code>, qui renvoie tout le contenu de la base de donn\u00e9es, <code>db<\/code>.<\/p>\n<p>Sauvegardez votre fichier, et vous pouvez tester votre point de terminaison utilisateur. Ex\u00e9cutez la commande suivante dans votre terminal pour d\u00e9marrer le serveur API :<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>Dans votre navigateur, naviguez vers <code>http:\/\/localhost:8000\/api\/v1\/users<\/code>. Cela devrait renvoyer une liste de tous vos utilisateurs, comme indiqu\u00e9 ci-dessous :<\/p>\n<figure style=\"width: 685px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-results-read-request.png\" alt=\"Donn\u00e9es d'utilisateur r\u00e9cup\u00e9r\u00e9es par une requ\u00eate de lecture de la base de donn\u00e9es FastAPI.\" width=\"685\" height=\"1029\"><figcaption class=\"wp-caption-text\">Donn\u00e9es d&rsquo;utilisateur r\u00e9cup\u00e9r\u00e9es par une requ\u00eate de lecture de la base de donn\u00e9es FastAPI.<\/figcaption><\/figure>\n<p>\u00c0 ce stade, votre fichier <strong>main.py<\/strong> ressemblera \u00e0 ceci :<\/p>\n<pre><code class=\"language-python\">\n# main.py\nfrom typing import List\nfrom uuid import uuid4\nfrom fastapi import FastAPI\nfrom models import Gender, Role, User\napp = FastAPI()\ndb: List[User] = [\n User(\n id=uuid4(),\n first_name=\"John\",\n last_name=\"Doe\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Jane\",\n last_name=\"Doe\",\n gender=Gender.female,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"James\",\n last_name=\"Gabriel\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Eunit\",\n last_name=\"Eunit\",\n gender=Gender.male,\n roles=[Role.admin, Role.user],\n ),\n]\n@app.get(\"\/\")\nasync def root():\n return {\"Hello\": \"World\",}\n@app.get(\"\/api\/v1\/users\")\nasync def get_users():\n return db\n<\/code><\/pre>\n<h3>Cr\u00e9er des enregistrements de base de donn\u00e9es<\/h3>\n<p>L&rsquo;\u00e9tape suivante consiste \u00e0 cr\u00e9er un point de terminaison pour cr\u00e9er un nouvel utilisateur dans votre base de donn\u00e9es. Collez le code suivant dans votre fichier <strong>main.py <\/strong>:<\/p>\n<pre><code class=\"language-python\">\n# main.py\n@app.post(\"\/api\/v1\/users\")\nasync def create_user(user: User):\n db.append(user)\n return {\"id\": user.id}\n<\/code><\/pre>\n<p>Dans ce code, vous avez d\u00e9fini le point de terminaison pour soumettre un nouvel utilisateur et utilis\u00e9 le d\u00e9corateur <code>@app.post<\/code> pour cr\u00e9er une m\u00e9thode <code>POST<\/code>.<\/p>\n<p>Vous avez \u00e9galement cr\u00e9\u00e9 la fonction <code>create_user<\/code>, qui accepte <code>user<\/code> du mod\u00e8le <code>User<\/code>, et ajout\u00e9 (appended) le nouveau <code>user<\/code> cr\u00e9\u00e9 \u00e0 la base de donn\u00e9es, <code>db<\/code>. Enfin, le point de terminaison renvoie un objet JSON de l&rsquo;utilisateur nouvellement cr\u00e9\u00e9 <code>id<\/code>.<\/p>\n<p>Vous devrez utiliser la documentation API automatique fournie par FastAPI pour tester votre point de terminaison, comme vu ci-dessus. Ceci est d\u00fb au fait que vous ne pouvez pas faire une requ\u00eate POST en utilisant le navigateur web. Naviguez vers <code>http:\/\/localhost:8000\/docs<\/code> pour tester en utilisant la documentation fournie par <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\">SwaggerUI<\/a>.<\/p>\n<figure style=\"width: 685px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-post-request.png\" alt=\"Param\u00e8tres pour une requ\u00eate POST FastAPI.\" width=\"685\" height=\"1029\"><figcaption class=\"wp-caption-text\">Param\u00e8tres pour une requ\u00eate POST FastAPI.<\/figcaption><\/figure>\n<h3>Supprimer des enregistrements de base de donn\u00e9es<\/h3>\n<p>Puisque vous construisez une application CRUD, votre application devra avoir la possibilit\u00e9 de <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\/DELETE\">supprimer<\/a> une ressource sp\u00e9cifi\u00e9e. Pour ce tutoriel, vous allez cr\u00e9er un point de terminaison pour supprimer un utilisateur.<\/p>\n<p>Collez le code suivant dans votre fichier <strong>main.py <\/strong>:<\/p>\n<pre><code class=\"language-python\">\n# main.py\nfrom uuid import UUID\nfrom fastapi HTTPException\n@app.delete(\"\/api\/v1\/users\/{id}\")\nasync def delete_user(id: UUID):\nfor user in db:\n if user.id == id:\n db.remove(user)\n return\nraise HTTPException(\n status_code=404, detail=f\"Delete user failed, id {id} not found.\"\n )\n<\/code><\/pre>\n<p>Voici une d\u00e9composition ligne par ligne du fonctionnement de ce code :<\/p>\n<ul>\n<li><code>@app.delete(\"\/api\/v1\/users\/{id}\")<\/code> : Vous avez cr\u00e9\u00e9 le point de terminaison de suppression \u00e0 l&rsquo;aide du d\u00e9corateur <code>@app.delete()<\/code>. Le chemin est toujours <code>\/api\/v1\/users\/{id}<\/code>, mais il r\u00e9cup\u00e8re ensuite <code>id<\/code>, qui est une variable de chemin correspondant \u00e0 l&rsquo;id de l&rsquo;utilisateur.<\/li>\n<li><code>async def delete_user(id: UUID):<\/code> : Cr\u00e9e la fonction <code>delete_user<\/code>, qui r\u00e9cup\u00e8re le <code>id<\/code> \u00e0 partir de l&rsquo;URL.<\/li>\n<li><code>for user in db:<\/code> : Ceci indique \u00e0 l&rsquo;application de boucler \u00e0 travers les utilisateurs dans la base de donn\u00e9es, et de v\u00e9rifier si le <code>id<\/code> pass\u00e9 correspond \u00e0 un utilisateur dans la base de donn\u00e9es.<\/li>\n<li><code>db.remove(user)<\/code> : Si le <code>id<\/code> correspond \u00e0 un utilisateur, l&rsquo;utilisateur sera supprim\u00e9 ; sinon, un <code>HTTPException<\/code> avec un <a href=\"https:\/\/kinsta.com\/fr\/blog\/codes-statut-http\/\">code d&rsquo;\u00e9tat<\/a> de 404 sera lev\u00e9.<\/li>\n<\/ul>\n<figure style=\"width: 594px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-delete-request.png\" alt=\"Param\u00e8tres pour une requ\u00eate FastAPI DELETE.\" width=\"594\" height=\"1030\"><figcaption class=\"wp-caption-text\">Param\u00e8tres pour une requ\u00eate FastAPI DELETE.<\/figcaption><\/figure>\n<h3>Mise \u00e0 jour des enregistrements de la base de donn\u00e9es<\/h3>\n<p>Vous allez cr\u00e9er un point de terminaison pour mettre \u00e0 jour les d\u00e9tails d&rsquo;un utilisateur. Les d\u00e9tails qui peuvent \u00eatre mis \u00e0 jour incluent les param\u00e8tres suivants : <code>first_name<\/code>, <code>last_name<\/code>, et <code>roles<\/code>.<\/p>\n<p>Dans votre fichier <strong>models.py<\/strong>, collez le code suivant sous votre mod\u00e8le <code>User<\/code>, c&rsquo;est-\u00e0-dire apr\u00e8s la classe <code>User(BaseModel):<\/code> :<\/p>\n<pre><code class=\"language-python\"> # models.py\n class UpdateUser(BaseModel):\n first_name: Optional[str]\n last_name: Optional[str]\n roles: Optional[List[Role]]\n<\/code><\/pre>\n<p>Dans cet extrait, la classe <code>UpdateUser<\/code> \u00e9tend <code>BaseModel<\/code>. Vous d\u00e9finissez ensuite les param\u00e8tres utilisateur pouvant \u00eatre mis \u00e0 jour, tels que <code>first_name<\/code>, <code>last_name<\/code>, et <code>roles<\/code>, comme \u00e9tant facultatifs.<\/p>\n<p>Vous allez maintenant cr\u00e9er un point de terminaison pour mettre \u00e0 jour les d\u00e9tails d&rsquo;un utilisateur particulier. Dans votre fichier <strong>main.py<\/strong>, collez le code suivant apr\u00e8s le d\u00e9corateur <code>@app.delete<\/code> :<\/p>\n<pre><code class=\"language-python\"># main.py\n@app.put(\"\/api\/v1\/users\/{id}\")\nasync def update_user(user_update: UpdateUser, id: UUID):\n for user in db:\n if user.id == id:\n if user_update.first_name is not None:\n user.first_name = user_update.first_name\n if user_update.last_name is not None:\n user.last_name = user_update.last_name\n if user_update.roles is not None:\n user.roles = user_update.roles\n return user.id\n raise HTTPException(status_code=404, detail=f\"Could not find user with id: {id}\")\n<\/code><\/pre>\n<p>Dans le code ci-dessus, vous avez fait ce qui suit :<\/p>\n<ul>\n<li>Cr\u00e9ation de <code>@app.put(\"\/api\/v1\/users\/{id}\")<\/code>, le point de terminaison de mise \u00e0 jour. Il a un param\u00e8tre variable <code>id<\/code> qui correspond \u00e0 l&rsquo;id de l&rsquo;utilisateur.<\/li>\n<li>Cr\u00e9ation d&rsquo;une m\u00e9thode appel\u00e9e <code>update_user<\/code>, qui prend en compte la classe <code>UpdateUser<\/code> et <code>id<\/code>.<\/li>\n<li>Utilisation d&rsquo;une boucle <code>for<\/code> pour v\u00e9rifier si l&rsquo;utilisateur associ\u00e9 \u00e0 la passe <code>id<\/code> est dans la base de donn\u00e9es.<\/li>\n<li>V\u00e9rification si l&rsquo;un des param\u00e8tres de l&rsquo;utilisateur est <code>is not None<\/code> (non nul). Si un param\u00e8tre, tel que <code>first_name<\/code>, <code>last_name<\/code>, ou <code>roles<\/code>, n&rsquo;est pas nul, il est mis \u00e0 jour.<\/li>\n<li>Si l&rsquo;op\u00e9ration r\u00e9ussit, l&rsquo;identifiant de l&rsquo;utilisateur est renvoy\u00e9.<\/li>\n<li>Si l&rsquo;utilisateur n&rsquo;a pas \u00e9t\u00e9 localis\u00e9, une exception <code>HTTPException<\/code> avec un code d&rsquo;\u00e9tat de 404 et un message de <code>Could not find user with id: {id}<\/code> est lev\u00e9e.<\/li>\n<\/ul>\n<p>Pour tester ce point de terminaison, assurez-vous que votre serveur Uvicorn est en cours d&rsquo;ex\u00e9cution. S&rsquo;il n&rsquo;est pas en cours d&rsquo;ex\u00e9cution, saisissez cette commande :<\/p>\n<pre><code class=\"language-bash\">uvicorn main:app --reload<\/code><\/pre>\n<p>Vous trouverez ci-dessous une capture d&rsquo;\u00e9cran du test.<\/p>\n<figure style=\"width: 593px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-update-request.png\" alt=\"Param\u00e8tres pour une requ\u00eate UPDATE FastAPI.\" width=\"593\" height=\"954\"><figcaption class=\"wp-caption-text\">Param\u00e8tres pour une requ\u00eate UPDATE FastAPI.<\/figcaption><\/figure>\n\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>Dans ce tutoriel, vous vous \u00eates familiaris\u00e9 avec le framework FastAPI pour Python et avez constat\u00e9 par vous-m\u00eame la rapidit\u00e9 avec laquelle vous pouvez mettre en place une application aliment\u00e9e par FastAPI. Vous avez appris \u00e0 construire des points de terminaison API CRUD \u00e0 l&rsquo;aide du framework &#8211; cr\u00e9ation, lecture, mise \u00e0 jour et suppression d&rsquo;enregistrements de base de donn\u00e9es.<\/p>\n<p>Maintenant, si vous voulez faire passer votre d\u00e9veloppement d&rsquo;applications web au niveau sup\u00e9rieur, assurez-vous de v\u00e9rifier la plate-forme de Kinsta pour l&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/changelog\/hebergement-application-base-donnees\/\">h\u00e9bergement d&rsquo;applications et de bases de donn\u00e9es<\/a>. Comme FastAPI, c&rsquo;est puissamment simple.<\/p>\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=vmNem6wxfSQ\"><\/kinsta-video>\n","protected":false},"excerpt":{"rendered":"<p>FastAPI est un framework web rapide et l\u00e9ger pour construire des interfaces de programmation d&rsquo;applications modernes en utilisant Python 3.6 et plus. Dans ce tutoriel, nous &#8230;<\/p>\n","protected":false},"author":270,"featured_media":63996,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[405,492,857,341],"topic":[953,1003],"class_list":["post-63995","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-api","tag-python","tag-web-applications","tag-web-development","topic-api","topic-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cr\u00e9er une application avec FastAPI pour Python - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"On l&#039;appelle \u00ab fast \u00bb pour une bonne raison ! Voici ce que vous devez savoir sur FastAPI pour cr\u00e9er rapidement des interfaces de programmation d&#039;applications en utilisant Python.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cr\u00e9er une application avec FastAPI pour Python\" \/>\n<meta property=\"og:description\" content=\"On l&#039;appelle \u00ab fast \u00bb pour une bonne raison ! Voici ce que vous devez savoir sur FastAPI pour cr\u00e9er rapidement des interfaces de programmation d&#039;applications en utilisant Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-29T12:08:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-19T08:40:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/11\/fastapi.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Emmanuel Uchenna\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"On l&#039;appelle \u00ab fast \u00bb pour une bonne raison ! Voici ce que vous devez savoir sur FastAPI pour cr\u00e9er rapidement des interfaces de programmation d&#039;applications en utilisant Python.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/11\/fastapi.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emmanuel Uchenna\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/\"},\"author\":{\"name\":\"Emmanuel Uchenna\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\"},\"headline\":\"Cr\u00e9er une application avec FastAPI pour Python\",\"datePublished\":\"2022-11-29T12:08:00+00:00\",\"dateModified\":\"2024-09-19T08:40:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/\"},\"wordCount\":2644,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/11\/fastapi.jpg\",\"keywords\":[\"API\",\"Python\",\"web applications\",\"web development\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/\",\"name\":\"Cr\u00e9er une application avec FastAPI pour Python - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/11\/fastapi.jpg\",\"datePublished\":\"2022-11-29T12:08:00+00:00\",\"dateModified\":\"2024-09-19T08:40:40+00:00\",\"description\":\"On l'appelle \u00ab fast \u00bb pour une bonne raison ! Voici ce que vous devez savoir sur FastAPI pour cr\u00e9er rapidement des interfaces de programmation d'applications en utilisant Python.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/11\/fastapi.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/11\/fastapi.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cr\u00e9er une application avec FastAPI pour Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\",\"name\":\"Emmanuel Uchenna\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g\",\"caption\":\"Emmanuel Uchenna\"},\"description\":\"Emmanuel is an experienced, passionate, and enthusiastic software developer and technical writer with proven years of professional experience. He focuses on full-stack web development. He's fluent in ReactJS, JavaScript, VueJS, and NodeJS and familiar with industry-standard technologies such as Git, GitHub, and TDD. He helps individuals, businesses, and brands build responsive, accessible, beautiful, and intuitive websites to improve their online presence. He is also a technical writer for various websites and his own projects.\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/author\/emmanueluchenna\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Cr\u00e9er une application avec FastAPI pour Python - Kinsta\u00ae","description":"On l'appelle \u00ab fast \u00bb pour une bonne raison ! Voici ce que vous devez savoir sur FastAPI pour cr\u00e9er rapidement des interfaces de programmation d'applications en utilisant Python.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/","og_locale":"fr_FR","og_type":"article","og_title":"Cr\u00e9er une application avec FastAPI pour Python","og_description":"On l'appelle \u00ab fast \u00bb pour une bonne raison ! Voici ce que vous devez savoir sur FastAPI pour cr\u00e9er rapidement des interfaces de programmation d'applications en utilisant Python.","og_url":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2022-11-29T12:08:00+00:00","article_modified_time":"2024-09-19T08:40:40+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/11\/fastapi.jpg","type":"image\/jpeg"}],"author":"Emmanuel Uchenna","twitter_card":"summary_large_image","twitter_description":"On l'appelle \u00ab fast \u00bb pour une bonne raison ! Voici ce que vous devez savoir sur FastAPI pour cr\u00e9er rapidement des interfaces de programmation d'applications en utilisant Python.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/11\/fastapi.jpg","twitter_creator":"@kinsta_fr","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Emmanuel Uchenna","Dur\u00e9e de lecture estim\u00e9e":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/"},"author":{"name":"Emmanuel Uchenna","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f"},"headline":"Cr\u00e9er une application avec FastAPI pour Python","datePublished":"2022-11-29T12:08:00+00:00","dateModified":"2024-09-19T08:40:40+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/"},"wordCount":2644,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/11\/fastapi.jpg","keywords":["API","Python","web applications","web development"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/fastapi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/","url":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/","name":"Cr\u00e9er une application avec FastAPI pour Python - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/11\/fastapi.jpg","datePublished":"2022-11-29T12:08:00+00:00","dateModified":"2024-09-19T08:40:40+00:00","description":"On l'appelle \u00ab fast \u00bb pour une bonne raison ! Voici ce que vous devez savoir sur FastAPI pour cr\u00e9er rapidement des interfaces de programmation d'applications en utilisant Python.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/fastapi\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/11\/fastapi.jpg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/11\/fastapi.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/fastapi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/kinsta.com\/fr\/sujets\/python\/"},{"@type":"ListItem","position":3,"name":"Cr\u00e9er une application avec FastAPI pour Python"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f","name":"Emmanuel Uchenna","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g","caption":"Emmanuel Uchenna"},"description":"Emmanuel is an experienced, passionate, and enthusiastic software developer and technical writer with proven years of professional experience. He focuses on full-stack web development. He's fluent in ReactJS, JavaScript, VueJS, and NodeJS and familiar with industry-standard technologies such as Git, GitHub, and TDD. He helps individuals, businesses, and brands build responsive, accessible, beautiful, and intuitive websites to improve their online presence. He is also a technical writer for various websites and his own projects.","url":"https:\/\/kinsta.com\/fr\/blog\/author\/emmanueluchenna\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/63995","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/270"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=63995"}],"version-history":[{"count":13,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/63995\/revisions"}],"predecessor-version":[{"id":69541,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/63995\/revisions\/69541"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/63995\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/63995\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/63995\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/63995\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/63995\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/63995\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/63995\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/63995\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/63995\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/63995\/translations\/dk"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/63995\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/63996"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=63995"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=63995"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=63995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}