L'objectif de ce TD est de reprendre les développements réalisés dans le TD sur Docker et d'étendre cela à une API Rest. Ceci n'est qu'une introduction aux API Rest et vous ne traiterez pas l'asynchronisme ni les aspects liés à la sécurité / authentification / autorisation.
Faites une API Rest avec FASTAPI qui accède à une base de donnée mongodb afin de fournir les endpoits suivants :
- [GET] personnes
- [POST] personnes
- [GET] personnes/ssn
- [DELETE] personnes/ssn
- [UPDATE] personnes/ssn
Le modèle utilisé, nommé ModelPersonne
, doit être composé d'un nom
, prenom
et ssn
. Dans le cas de l'endpoint [POST] personnes
, assurez vous qu'une HTTPException
soit retournée lorsque le numéro ssn fourni est déjà enregistré.
Indications : vous utiliserez deux conteneurs, le premier remplira la base de donnée (cf. précédent TD), le second exposera l'API Rest sur le port 3000. Il est attendu que votre modèle soit défini dans une fichier model_personne.py
, votre application RestAPI soit définie dans un fichier app.py
, la logique associée au parsing de ssn soit contenu dans un fichier ssn_parser.py
.
Note : utilisez des validator
pour vous assurer que le ssn du modèle est valide (https://pydantic-docs.helpmanual.io/usage/validators/).
Retravaillez l'endpoint [GET] personnes
pour qu'il affiche plus d'informations. Celui-ci devra permettre d'afficher (si spécifié) les informations suivantes :
- le sex de la personne,
- la date de naissance de la personne (mois calendaire + année);
- le lieu de naissance;
- la position.
Dans le cas du lieu de naissance, utilisez le service HTTP et le parsing de fichier :
- Lorsque la personne vient de France, utilisez l'API https://api.gouv.fr/les-api/api-geo afin d'afficher le vrai nom du département de naissance et le vrai nom de la commune.
- Lorsque la personne vient de l'étrager, utilisez le fichier
pays.json
Note : il serait bon de tester votre parsing de ssn afin de vous assurer que les informations extraites sont cohérentes.
Rédigez un docker compose permettant de lancer le tout.
Modifiez votre API pour que celle-ci fonctionne avec un stockage des données basé sur un fichier json et non plus une base de données. Pour vous aider, vous pourriez utiliser les appels suivant :
import json
def read_json(json_path):
with open(json_path, "r") as f:
return json.loads(f.read())
def write_json(json_path, data):
with open(json_path, "w") as f:
json.dupmp(data, f, indent=4)
Modifiez votre docker compose pour pouvoir livrer votre nouvelle version