A algoo, on travaille à mort en python (on fait du python en backend, du JS en front) et on a des contraintes variées selon les projets. Le problème récurrent : développer des API REST (mais pas que) et qu'elles soient vraiment auto-documentées.
Du coup on a développé hapic qui interface un framework web classique + un (ou des) lib de sérialisation et validation (marshmallow, serpyco) et génère la doc au format OpenAPI et peut aussi la servir avec une ligne de code supplémentaire.
on utilise aiohttp+hapic+serpyco sur un projet client (contexte embarqué, besoin de performance et d'optimisation de l'utilisation du CPU et des entrées-sorties)
Serpyco, c'est un collègue à nous qui le développe c'est un serialiser très rapide qui est dévelopé en python et cython.
Hapic est pas hyper bien documenté, mais ça fait vraiment bien le job, et en plus ça permet de séparer le code source lié aux API et le code purement métier (exemple : la gestion des cas d'erreurs peut se traiter sous forme de décorateur, donc le code métier implémente le cas nominal et n'est pas pollué par des if/elif/else pour gérer les cas d'erreur).
Un petit exemple de code extrait du code source tracim :
handle_exception intercepte des exceptions et génère une erreur JSON avec le code HTTP demandé
input_path, input_body, output_body serialisent et valident les structures
with_api_doc active l'introspection et la génération de la documentation
le code que l'on écrit ne manipule que des objets/classes python, on ne mélange plus d'intelligence HTTP ou JSON dans le code.
# [aiohttp|flask|bottle|pyramid] + hapic + [marshmallow|serpyco]
Posté par LeBouquetin (site web personnel, Mastodon) . En réponse au journal Python pour la rentrée 2019 - Hors Série - Python revient dans la course face à Node.js. Évalué à 5.
Hello,
A algoo, on travaille à mort en python (on fait du python en backend, du JS en front) et on a des contraintes variées selon les projets. Le problème récurrent : développer des API REST (mais pas que) et qu'elles soient vraiment auto-documentées.
Du coup on a développé hapic qui interface un framework web classique + un (ou des) lib de sérialisation et validation (marshmallow, serpyco) et génère la doc au format OpenAPI et peut aussi la servir avec une ligne de code supplémentaire.
Concrètement :
Serpyco, c'est un collègue à nous qui le développe c'est un serialiser très rapide qui est dévelopé en python et cython.
Hapic est pas hyper bien documenté, mais ça fait vraiment bien le job, et en plus ça permet de séparer le code source lié aux API et le code purement métier (exemple : la gestion des cas d'erreurs peut se traiter sous forme de décorateur, donc le code métier implémente le cas nominal et n'est pas pollué par des if/elif/else pour gérer les cas d'erreur).
Un petit exemple de code extrait du code source tracim :
handle_exceptionintercepte des exceptions et génère une erreur JSON avec le code HTTP demandéinput_path,input_body,output_bodyserialisent et valident les structureswith_api_docactive l'introspection et la génération de la documentation#tracim pour la collaboration d'équipe __ #galae pour la messagerie email __ dirigeant @ algoo