[{"_path":"/posts/2022/01/hello-world","_draft":false,"_partial":false,"_empty":false,"title":"Hello World","description":"code deploy","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":":checked: deploy\n🚀\n:check-mark: code"}]}]},"published_at":"2022-01-01T00:00:00.000Z","image":"/images/fleurs-blanches.jpg","image_caption":"Kelly L @kellymlacy","tags":["Hello World","Blabla"],"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":":checked: deploy\n🚀\n:check-mark: code"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:posts:2022:01:hello-world.md","_source":"content","_file":"posts/2022/01/hello-world.md","_extension":"md"},{"_path":"/posts/2022/03/creer-une-api-en-quelques-minutes-avec-fastapi","_draft":false,"_partial":false,"_empty":false,"title":"Créer une API en quelques minutes avec FastAPI","description":"FastAPI est un très bon outil pour développer rapidement des API en Python. Dans cet article, nous allons voir pourquoi le choix de ce framework et comment créer notre première application en quelques minutes.","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"pourquoi-fastapi-"},"children":[{"type":"text","value":"Pourquoi FastAPI 🚀"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"En consultant le site de "},{"type":"element","tag":"a","props":{"href":"https://fastapi.tiangolo.com/","rel":["nofollow","noopener","noreferrer"],"target":"_blank"},"children":[{"type":"text","value":"FastAPI"}]},{"type":"text","value":", la promesse est assez clair:"}]},{"type":"element","tag":"blockquote","props":{},"children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"FastAPI framework, high performance, easy to learn, fast to code, ready for production"}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Le message est claire: performance et facilité. Le framework nous propose également une liste de features intéressante dont:"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"l'intégration de l'auto-documentation se basant sur OpenAPI"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"l'utilisation des dernières mises à jours de Python comme l'async/await et le typage"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"l'injéction de dépendences"}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Vous pouvez consulter la liste complète des features "},{"type":"element","tag":"a","props":{"href":"https://fastapi.tiangolo.com/features/","rel":["nofollow","noopener","noreferrer"],"target":"_blank"},"children":[{"type":"text","value":"ici"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Il a été également élu \"New Tool of the Year\" en 2021 par "},{"type":"element","tag":"a","props":{"href":"https://stackshare.io/posts/top-developer-tools-2021","rel":["nofollow","noopener","noreferrer"],"target":"_blank"},"children":[{"type":"text","value":"stackshare"}]}]},{"type":"element","tag":"h2","props":{"id":"installation"},"children":[{"type":"text","value":"Installation"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"On commence avec la création de l'environnement virtuel avec le module "},{"type":"element","tag":"a","props":{"href":"https://docs.python.org/fr/3/library/venv.html","rel":["nofollow","noopener","noreferrer"],"target":"_blank"},"children":[{"type":"text","value":"venv"}]},{"type":"text","value":" de Python."}]},{"type":"element","tag":"code","props":{"code":"# initialisation du venv\npython3 -m venv venv\n\n# activation du venv\nsource venv/bin/activate\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# initialisation du venv\npython3 -m venv venv\n\n# activation du venv\nsource venv/bin/activate\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Concernant les requirements, nous avons besoin d'installer:"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Le framework FastAPI"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"http://www.uvicorn.org/","rel":["nofollow","noopener","noreferrer"],"target":"_blank"},"children":[{"type":"text","value":"Uvicorn"}]},{"type":"text","value":" afin d'obtenir un serveur web permettant de gérer l'asynchrone. C'est un ASGI (Asynchronous Server Gateway Interface)"}]}]},{"type":"element","tag":"code","props":{"code":"# création du fichier requirements\ntouch requirements.txt\n\n# écriture des dépendances dans le fichier\ncat <<EOT >> requirements.txt\nfastapi==0.73.0\nuvicorn==0.17.4\nEOT\n\n# installation\npip install -r requirements.txt\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# création du fichier requirements\ntouch requirements.txt\n\n# écriture des dépendances dans le fichier\ncat <<EOT >> requirements.txt\nfastapi==0.73.0\nuvicorn==0.17.4\nEOT\n\n# installation\npip install -r requirements.txt\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"création-de-la-première-route"},"children":[{"type":"text","value":"Création de la première route"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Maintenant que toutes les dépendances sont installées, nous pouvons créer notre première route de notre projet FastAPI."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Pour cela, nous créons un dossier "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"app"}]},{"type":"text","value":" et à l'intérieur de ce dernier, un fichier "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"main.py"}]},{"type":"text","value":" qui va contenir la déclaration de notre première route."}]},{"type":"element","tag":"code","props":{"code":"# ~/app/main.py\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\nasync def read_home():\n return {\"Music\": \"Song\"}\n","language":"python"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# ~/app/main.py\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\nasync def read_home():\n return {\"Music\": \"Song\"}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Nous pouvons maintenant lancer uvicorn, à la racine de notre projet:"}]},{"type":"element","tag":"code","props":{"code":"uvicorn app.main:app --reload\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"uvicorn app.main:app --reload\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Vous pouvez maintenant accéder à votre API en allant sur "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"http://127.0.0.1:8000"}]},{"type":"text","value":"et sur la documentation de votre route "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"http://127.0.0.1:8000/docs"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"actions"},"children":[{"type":"text","value":"Actions"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Ok, maintenant que notre projet fonctionne et que nous pouvons visualiser le résultat de notre première route, nous allons construire notre gestion des titres de musique avec des actions simples."}]},{"type":"element","tag":"h3","props":{"id":"avant-de-commencer-un-peu-de-typage"},"children":[{"type":"text","value":"Avant de commencer, un peu de typage"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"C'est le bon moment pour introduire "},{"type":"element","tag":"a","props":{"href":"https://pydantic-docs.helpmanual.io/","rel":["nofollow","noopener","noreferrer"],"target":"_blank"},"children":[{"type":"text","value":"pydantic"}]},{"type":"text","value":" qui permet de nous faciliter la vie avec la validation de notre modèle en l'occurence "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Song"}]},{"type":"text","value":" dans notre cas."}]},{"type":"element","tag":"code","props":{"code":"from typing import List\nfrom pydantic import BaseModel\n\n\nclass Song(BaseModel):\n id: int\n title: str\n artist: str\n genre: List[str]\n\n\n# Notre liste de musiques\nsongs: List[Song] = [\n Song(\n id=1,\n title='Gung Ho',\n artist='Shaka Ponk',\n genre=['Rock', 'Electronic rock']\n ),\n Song(\n id=2,\n title='Rusty Fonky',\n artist='Shaka Ponk',\n genre=['Rock', 'Electronic rock']\n ),\n]\n","language":"python"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"from typing import List\nfrom pydantic import BaseModel\n\n\nclass Song(BaseModel):\n id: int\n title: str\n artist: str\n genre: List[str]\n\n\n# Notre liste de musiques\nsongs: List[Song] = [\n Song(\n id=1,\n title='Gung Ho',\n artist='Shaka Ponk',\n genre=['Rock', 'Electronic rock']\n ),\n Song(\n id=2,\n title='Rusty Fonky',\n artist='Shaka Ponk',\n genre=['Rock', 'Electronic rock']\n ),\n]\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"On déclare notre modèle "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Song"}]},{"type":"text","value":" étendu de "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"BaseModel"}]},{"type":"text","value":" avec les différents attributs. Puis nous créons en dessous notre variable songs qui est typé comme liste de "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Song"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"lister-les-titres-de-musiques"},"children":[{"type":"text","value":"Lister les titres de musiques"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Dans l'exemple suivant, la route retourne la collection de musique précédemment créée. "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"response_model"}]},{"type":"text","value":" permet de contrôler quel forme de réponse doit retourner "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/songs"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"@app.get(\"/songs\", response_model=List[Song])\nasync def get_songs():\n return songs\n","language":"python"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@app.get(\"/songs\", response_model=List[Song])\nasync def get_songs():\n return songs\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"trouver-une-musique-en-fonction-de-son-id"},"children":[{"type":"text","value":"Trouver une musique en fonction de son id"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"La route suivante filtre la collection de musique par son id. Notez le typage associé au paramètre "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"song_id"}]},{"type":"text","value":", FastAPI lévera automatiquement une exception si le paramètre passé n'est pas de type "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"int"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"@app.get(\"/songs/{song_id}\", response_model=Song)\nasync def get_song(song_id: int):\n # retourne le premier résultat positif dans les dictionnaires de la liste.\n song = next((s for s in songs if s['id'] == song_id), None)\n\n if not song:\n raise HTTPException(status_code=404, detail=\"Song not found\")\n\n return song\n","language":"python"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@app.get(\"/songs/{song_id}\", response_model=Song)\nasync def get_song(song_id: int):\n # retourne le premier résultat positif dans les dictionnaires de la liste.\n song = next((s for s in songs if s['id'] == song_id), None)\n\n if not song:\n raise HTTPException(status_code=404, detail=\"Song not found\")\n\n return song\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"créer-une-nouvelle-musique"},"children":[{"type":"text","value":"Créer une nouvelle musique"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Pour ajouter une nouvelle musique à notre collection, nous utilisons le verbe "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"POST"}]},{"type":"text","value":". Un modèle "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"SongCreate"}]},{"type":"text","value":" a aussi été créé afin de valider le body envoyé.\nUne fois que ce dernier est validé, on instancie une classe "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Song"}]},{"type":"text","value":" avec les données validées puis nous y ajoutons un "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ID"}]},{"type":"text","value":" unique pour notre collection. "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Song"}]},{"type":"text","value":" est ensuite ajouté à notre collection de musique."}]},{"type":"element","tag":"code","props":{"code":"class SongCreate(BaseModel):\n title: str\n artist: str\n genre: List[str]\n\n\n@app.post(\"/songs\", response_model=Song)\nasync def get_songs(song: SongCreate):\n last_song_registered = max(songs, key=lambda s: s.id)\n\n new_id = last_song_registered.id + 1\n new_song = Song(**song.dict(), id=new_id)\n\n # On ajoute la nouvelle chanson à notre collection\n songs.append(new_song)\n\n return new_song\n","language":"python"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"class SongCreate(BaseModel):\n title: str\n artist: str\n genre: List[str]\n\n\n@app.post(\"/songs\", response_model=Song)\nasync def get_songs(song: SongCreate):\n last_song_registered = max(songs, key=lambda s: s.id)\n\n new_id = last_song_registered.id + 1\n new_song = Song(**song.dict(), id=new_id)\n\n # On ajoute la nouvelle chanson à notre collection\n songs.append(new_song)\n\n return new_song\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"supprimer-une-musique-de-notre-collection"},"children":[{"type":"text","value":"Supprimer une musique de notre collection"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Enfin il nous manque l'action de supprimer une musique par son "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ID"}]},{"type":"text","value":". Pour cela, nous utilisons le verbe "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"DELETE"}]},{"type":"text","value":". Une exception est levée si l'index n'est pas trouvé dans la collection de musique."}]},{"type":"element","tag":"code","props":{"code":"@app.delete(\"/songs/{song_id}\")\nasync def delete_songs(song_id: int):\n index_song = next((index for (index, s) in enumerate(songs) if s.id == song_id), None)\n\n if index_song is None:\n raise HTTPException(status_code=404, detail=f\"Song not found\")\n\n del songs[index_song]\n return {}\n","language":"python"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@app.delete(\"/songs/{song_id}\")\nasync def delete_songs(song_id: int):\n index_song = next((index for (index, s) in enumerate(songs) if s.id == song_id), None)\n\n if index_song is None:\n raise HTTPException(status_code=404, detail=f\"Song not found\")\n\n del songs[index_song]\n return {}\n"}]}]}]}]},"published_at":"2022-03-15T00:00:00.000Z","image":"/images/timelapse.jpg","image_caption":"Kelly L @kellymlacy","tags":["Python","API"],"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"pourquoi-fastapi-"},"children":[{"type":"text","value":"Pourquoi FastAPI 🚀"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"En consultant le site de "},{"type":"element","tag":"a","props":{"href":"https://fastapi.tiangolo.com/","rel":["nofollow","noopener","noreferrer"],"target":"_blank"},"children":[{"type":"text","value":"FastAPI"}]},{"type":"text","value":", la promesse est assez clair:"}]},{"type":"element","tag":"blockquote","props":{},"children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"FastAPI framework, high performance, easy to learn, fast to code, ready for production"}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Le message est claire: performance et facilité. Le framework nous propose également une liste de features intéressante dont:"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"l'intégration de l'auto-documentation se basant sur OpenAPI"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"l'utilisation des dernières mises à jours de Python comme l'async/await et le typage"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"l'injéction de dépendences"}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Vous pouvez consulter la liste complète des features "},{"type":"element","tag":"a","props":{"href":"https://fastapi.tiangolo.com/features/","rel":["nofollow","noopener","noreferrer"],"target":"_blank"},"children":[{"type":"text","value":"ici"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Il a été également élu \"New Tool of the Year\" en 2021 par "},{"type":"element","tag":"a","props":{"href":"https://stackshare.io/posts/top-developer-tools-2021","rel":["nofollow","noopener","noreferrer"],"target":"_blank"},"children":[{"type":"text","value":"stackshare"}]}]},{"type":"element","tag":"h2","props":{"id":"installation"},"children":[{"type":"text","value":"Installation"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"On commence avec la création de l'environnement virtuel avec le module "},{"type":"element","tag":"a","props":{"href":"https://docs.python.org/fr/3/library/venv.html","rel":["nofollow","noopener","noreferrer"],"target":"_blank"},"children":[{"type":"text","value":"venv"}]},{"type":"text","value":" de Python."}]},{"type":"element","tag":"code","props":{"code":"# initialisation du venv\npython3 -m venv venv\n\n# activation du venv\nsource venv/bin/activate\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#545454"}},"children":[{"type":"text","value":"# initialisation du venv"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"python3 -m venv venv"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#545454"}},"children":[{"type":"text","value":"# activation du venv"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"source"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" venv/bin/activate"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Concernant les requirements, nous avons besoin d'installer:"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Le framework FastAPI"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"http://www.uvicorn.org/","rel":["nofollow","noopener","noreferrer"],"target":"_blank"},"children":[{"type":"text","value":"Uvicorn"}]},{"type":"text","value":" afin d'obtenir un serveur web permettant de gérer l'asynchrone. C'est un ASGI (Asynchronous Server Gateway Interface)"}]}]},{"type":"element","tag":"code","props":{"code":"# création du fichier requirements\ntouch requirements.txt\n\n# écriture des dépendances dans le fichier\ncat <<EOT >> requirements.txt\nfastapi==0.73.0\nuvicorn==0.17.4\nEOT\n\n# installation\npip install -r requirements.txt\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#545454"}},"children":[{"type":"text","value":"# création du fichier requirements"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"touch requirements.txt"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#545454"}},"children":[{"type":"text","value":"# écriture des dépendances dans le fichier"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"cat "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"<<"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"EOT"}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":" >> requirements.txt"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"fastapi==0.73.0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"uvicorn==0.17.4"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"EOT"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#545454"}},"children":[{"type":"text","value":"# installation"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"pip install -r requirements.txt"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"création-de-la-première-route"},"children":[{"type":"text","value":"Création de la première route"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Maintenant que toutes les dépendances sont installées, nous pouvons créer notre première route de notre projet FastAPI."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Pour cela, nous créons un dossier "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"app"}]},{"type":"text","value":" et à l'intérieur de ce dernier, un fichier "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"main.py"}]},{"type":"text","value":" qui va contenir la déclaration de notre première route."}]},{"type":"element","tag":"code","props":{"code":"# ~/app/main.py\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\nasync def read_home():\n return {\"Music\": \"Song\"}\n","language":"python"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#545454"}},"children":[{"type":"text","value":"# ~/app/main.py"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" fastapi "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" FastAPI"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"app "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"FastAPI"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"@"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"app"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"def"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"read_home"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"():"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"Music"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"Song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Nous pouvons maintenant lancer uvicorn, à la racine de notre projet:"}]},{"type":"element","tag":"code","props":{"code":"uvicorn app.main:app --reload\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"uvicorn app.main:app --reload"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Vous pouvez maintenant accéder à votre API en allant sur "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"http://127.0.0.1:8000"}]},{"type":"text","value":"et sur la documentation de votre route "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"http://127.0.0.1:8000/docs"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"actions"},"children":[{"type":"text","value":"Actions"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Ok, maintenant que notre projet fonctionne et que nous pouvons visualiser le résultat de notre première route, nous allons construire notre gestion des titres de musique avec des actions simples."}]},{"type":"element","tag":"h3","props":{"id":"avant-de-commencer-un-peu-de-typage"},"children":[{"type":"text","value":"Avant de commencer, un peu de typage"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"C'est le bon moment pour introduire "},{"type":"element","tag":"a","props":{"href":"https://pydantic-docs.helpmanual.io/","rel":["nofollow","noopener","noreferrer"],"target":"_blank"},"children":[{"type":"text","value":"pydantic"}]},{"type":"text","value":" qui permet de nous faciliter la vie avec la validation de notre modèle en l'occurence "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Song"}]},{"type":"text","value":" dans notre cas."}]},{"type":"element","tag":"code","props":{"code":"from typing import List\nfrom pydantic import BaseModel\n\n\nclass Song(BaseModel):\n id: int\n title: str\n artist: str\n genre: List[str]\n\n\n# Notre liste de musiques\nsongs: List[Song] = [\n Song(\n id=1,\n title='Gung Ho',\n artist='Shaka Ponk',\n genre=['Rock', 'Electronic rock']\n ),\n Song(\n id=2,\n title='Rusty Fonky',\n artist='Shaka Ponk',\n genre=['Rock', 'Electronic rock']\n ),\n]\n","language":"python"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" typing "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" List"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" pydantic "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" BaseModel"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"class"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"Song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"BaseModel"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"):"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"int"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" title"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"str"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" artist"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"str"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" genre"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" List"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"str"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#545454"}},"children":[{"type":"text","value":"# Notre liste de musiques"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"songs"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" List"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"Song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"]"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"Song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#F78C6C"}},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"title"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"Gung Ho"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"artist"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"Shaka Ponk"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"genre"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"=["}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"Rock"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"Electronic rock"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"Song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#F78C6C"}},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"title"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"Rusty Fonky"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"artist"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"Shaka Ponk"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"genre"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"=["}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"Rock"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"Electronic rock"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"]"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"On déclare notre modèle "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Song"}]},{"type":"text","value":" étendu de "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"BaseModel"}]},{"type":"text","value":" avec les différents attributs. Puis nous créons en dessous notre variable songs qui est typé comme liste de "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Song"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"lister-les-titres-de-musiques"},"children":[{"type":"text","value":"Lister les titres de musiques"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Dans l'exemple suivant, la route retourne la collection de musique précédemment créée. "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"response_model"}]},{"type":"text","value":" permet de contrôler quel forme de réponse doit retourner "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/songs"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"@app.get(\"/songs\", response_model=List[Song])\nasync def get_songs():\n return songs\n","language":"python"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"@"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"app"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"/songs"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"response_model"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"List"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"Song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"])"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"def"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"get_songs"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"():"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" songs"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"trouver-une-musique-en-fonction-de-son-id"},"children":[{"type":"text","value":"Trouver une musique en fonction de son id"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"La route suivante filtre la collection de musique par son id. Notez le typage associé au paramètre "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"song_id"}]},{"type":"text","value":", FastAPI lévera automatiquement une exception si le paramètre passé n'est pas de type "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"int"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"@app.get(\"/songs/{song_id}\", response_model=Song)\nasync def get_song(song_id: int):\n # retourne le premier résultat positif dans les dictionnaires de la liste.\n song = next((s for s in songs if s['id'] == song_id), None)\n\n if not song:\n raise HTTPException(status_code=404, detail=\"Song not found\")\n\n return song\n","language":"python"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"@"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"app"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"/songs/{song_id}"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"response_model"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"Song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"def"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"get_song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"song_id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"int"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"):"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#545454"}},"children":[{"type":"text","value":"# retourne le premier résultat positif dans les dictionnaires de la liste."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" song "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"next"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"s "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"for"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" s "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"in"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" songs "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" s"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"'"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"]"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"=="}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" song_id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"),"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"None)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"not"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"raise"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"HTTPException"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"status_code"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#F78C6C"}},"children":[{"type":"text","value":"404"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"detail"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"Song not found"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" song"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"créer-une-nouvelle-musique"},"children":[{"type":"text","value":"Créer une nouvelle musique"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Pour ajouter une nouvelle musique à notre collection, nous utilisons le verbe "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"POST"}]},{"type":"text","value":". Un modèle "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"SongCreate"}]},{"type":"text","value":" a aussi été créé afin de valider le body envoyé.\nUne fois que ce dernier est validé, on instancie une classe "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Song"}]},{"type":"text","value":" avec les données validées puis nous y ajoutons un "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ID"}]},{"type":"text","value":" unique pour notre collection. "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Song"}]},{"type":"text","value":" est ensuite ajouté à notre collection de musique."}]},{"type":"element","tag":"code","props":{"code":"class SongCreate(BaseModel):\n title: str\n artist: str\n genre: List[str]\n\n\n@app.post(\"/songs\", response_model=Song)\nasync def get_songs(song: SongCreate):\n last_song_registered = max(songs, key=lambda s: s.id)\n\n new_id = last_song_registered.id + 1\n new_song = Song(**song.dict(), id=new_id)\n\n # On ajoute la nouvelle chanson à notre collection\n songs.append(new_song)\n\n return new_song\n","language":"python"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"class"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"SongCreate"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"BaseModel"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"):"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" title"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"str"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" artist"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"str"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" genre"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" List"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"str"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"@"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"app"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"post"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"/songs"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"response_model"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"Song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"def"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"get_songs"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" SongCreate"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"):"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" last_song_registered "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"max"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"songs"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"lambda"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"s"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" s"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"style":{"color":"#F07178"}},"children":[{"type":"text","value":"id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" new_id "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" last_song_registered"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"style":{"color":"#F07178"}},"children":[{"type":"text","value":"id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#F78C6C"}},"children":[{"type":"text","value":"1"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" new_song "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"Song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"(**"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"dict"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"(),"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"new_id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#545454"}},"children":[{"type":"text","value":"# On ajoute la nouvelle chanson à notre collection"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" songs"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"append"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"new_song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" new_song"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"supprimer-une-musique-de-notre-collection"},"children":[{"type":"text","value":"Supprimer une musique de notre collection"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Enfin il nous manque l'action de supprimer une musique par son "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ID"}]},{"type":"text","value":". Pour cela, nous utilisons le verbe "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"DELETE"}]},{"type":"text","value":". Une exception est levée si l'index n'est pas trouvé dans la collection de musique."}]},{"type":"element","tag":"code","props":{"code":"@app.delete(\"/songs/{song_id}\")\nasync def delete_songs(song_id: int):\n index_song = next((index for (index, s) in enumerate(songs) if s.id == song_id), None)\n\n if index_song is None:\n raise HTTPException(status_code=404, detail=f\"Song not found\")\n\n del songs[index_song]\n return {}\n","language":"python"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"@"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"app"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"delete"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"/songs/{song_id}"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"def"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"delete_songs"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"song_id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#FFCB6B"}},"children":[{"type":"text","value":"int"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"):"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" index_song "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"next"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"index "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"for"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"index"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" s"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"in"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" enumerate"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"songs"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" s"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"style":{"color":"#F07178"}},"children":[{"type":"text","value":"id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"=="}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" song_id"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"),"}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"None)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" index_song "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"is"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"None:"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"raise"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":"HTTPException"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"status_code"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#F78C6C"}},"children":[{"type":"text","value":"404"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":","}]},{"type":"element","tag":"span","props":{"style":{"color":"#82AAFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"detail"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"style":{"color":"#C792EA"}},"children":[{"type":"text","value":"f"}]},{"type":"element","tag":"span","props":{"style":{"color":"#C3E88D"}},"children":[{"type":"text","value":"\"Song not found\""}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"del"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" songs"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":"index_song"}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"style":{"color":"#EEFFFF"}},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"style":{"color":"#89DDFF"}},"children":[{"type":"text","value":"{}"}]}]}]}]}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"pourquoi-fastapi-","depth":2,"text":"Pourquoi FastAPI 🚀"},{"id":"installation","depth":2,"text":"Installation"},{"id":"création-de-la-première-route","depth":2,"text":"Création de la première route"},{"id":"actions","depth":2,"text":"Actions","children":[{"id":"avant-de-commencer-un-peu-de-typage","depth":3,"text":"Avant de commencer, un peu de typage"},{"id":"lister-les-titres-de-musiques","depth":3,"text":"Lister les titres de musiques"},{"id":"trouver-une-musique-en-fonction-de-son-id","depth":3,"text":"Trouver une musique en fonction de son id"},{"id":"créer-une-nouvelle-musique","depth":3,"text":"Créer une nouvelle musique"},{"id":"supprimer-une-musique-de-notre-collection","depth":3,"text":"Supprimer une musique de notre collection"}]}]}},"_type":"markdown","_id":"content:posts:2022:03:creer-une-api-en-quelques-minutes-avec-fastapi.md","_source":"content","_file":"posts/2022/03/creer-une-api-en-quelques-minutes-avec-fastapi.md","_extension":"md"}]