Frost - Modèle de serveur d’API REST basé sur Flask avec plusieurs fonctionnalités intégrées
(github.com)Bonjour ! Je suis actuellement un étudiant en licence qui prépare son projet de fin d’études (et sa recherche d’emploi...).
En développant un serveur d’API REST avec Flask, je me suis dit qu’il serait utile d’avoir un modèle incluant les fonctionnalités communes que l’on retrouve dans plusieurs projets, et j’ai donc créé un projet dans ce but.
Les fonctionnalités actuellement disponibles sont les suivantes.
Inscription, connexion et authentification JWT (authentification par jetons Refresh et Access)
......- Authentification Flask-Admin (émission automatique d’un cookie de jeton Admin et authentification)
......- Invalidation manuelle de jeton (invalidation du jeton d’un utilisateur connecté spécifique)
......- Vérification d’adresse e-mail et réinitialisation du mot de passe par e-mail (jeton e-mail)
Utilisation des fonctionnalités via les docstrings et les décorateurs de Python
......- Définition de routes nécessitant une connexion ou recommandant une connexion
......- Définition et limitation des paramètres de requête (gestion des champs Required/Optional)
............- Validation des entrées Header/Body/Query
......- Documentation de la description des routes / des paramètres de requête / des réponses possibles pour chaque route
Export de la documentation
......- Export au format de documentation OpenAPI 3.0 YAML
......- Fonction de génération de diagramme ER (sortie .dot)
Parmi ces fonctionnalités, la partie connexion (authentification JWT) et la génération de documentation OpenAPI 3 ont été développées directement avec PyJWT et apispec.
Pour la génération de documentation OpenAPI 3, Flask-RESTful et Flask-RESTplus sont dans un état non maintenu, et Flask-RESTX ne correspondait pas à l’usage que je voulais.
Par ailleurs, pour la connexion et l’authentification, Flask-Login est basé sur les sessions, et je ne savais pas que Flask-JWT-Extended existait (...), donc je l’ai implémenté moi-même.
Comme je suis encore étudiant en licence et que je l’ai fait dans l’urgence, il manque des commentaires et le code n’est pas très propre, mais je vous serais reconnaissant de le considérer comme une PoC montrant qu’il est possible de définir une API de cette manière !
(En fait, je l’avais déjà publié une fois juste avant, mais tout l’espacement d’indentation de la partie fonctionnalités avait disparu (...), donc je l’ai supprimé et reposté. Merci de votre compréhension !)
1 commentaires
Et vous êtes encore étudiant en licence, c'est impressionnant. Je vous soutiens !!