Il y a 9 ans -
Temps de lecture 5 minutes
[DevoxxFR] Soyons RESTful avec RESTX
La session Soyons RESTful avec RESTX a été présentée par Xavier Hanin (@xavierhanin). Il est le créateur du projet Apache Ivy et a consacré une grosse partie de son temps en 2013 à la création du framework RESTX.
Le monde du web est en pleine ébullition, JS prend les devants avec des frameworks comme Angular ou Backbone qui séduisent même les développeurs Java que nous sommes.
Mais pour le serveur, Java garde des atouts avec son typage et sa maintenabilité. Et pour faire communiquer les deux, rien de mieux que des services REST !
Nous verrons au travers de nombreuses démos comment restx.io, un framework Java open source et innovant peut vous aider à construire, documenter et tester l’API REST idéale pour vos applications web de demain.
Après trois slides d’introduction, la suite de la session a été consacrée au développement d’une API REST sur une application vierge. La partie front de l’application avait en effet été développée au préalable.
Initialisation du projet
Xavier a lancé le shell mis à disposition par RESTX et exécuté le wizard permettant de générer le squelette d’une nouvelle application. Après avoir répondu aux quelques questions du formulaire en laissant les choix par défaut, le squelette de l’application a été généré et la présentation s’est poursuivie avec IntelliJ. Il est à noter que RESTX est supporté par les trois principaux IDE du monde Java : IntelliJ, Eclipse et Netbeans.
Tour du propriétaire
Toute la configuration se fait par annotations, que ce soit pour les ressources, l’injection de dépendances ou toutes les autres fonctionnalités de RESTX. Et grâce à l’utilisation des processeurs d’annotations, le feedback au développeur se fait dès la compilation. RESTX a aussi l’avantage de fournir une interface d’administration riche en fonctionnalités pour présenter et tester l’API REST.
Concernant le lancement du serveur, le wizard d’installation a généré une méthode main permettant de lancer le serveur en mode standalone et également un fichier web.xml pour pouvoir embarquer le WAR dans un serveur d’application. Pour la démonstration, Xavier l’a lancé en mode standalone. C’est d’ailleurs la seule fois qu’il a démarré le serveur puisque RESTX offre un mode hot-compile/hot-reload performant qui permet de recharger automatiquement l’application suite aux modifications d’un fichier.
Une fois l’application lancée, Xavier nous a fait découvrir l’interface d’administration générée à partir des ressources RESTX :
Intégration de mongoDB
Après avoir déclaré les ressources nécessaires au fonctionnement de l’application et les avoir implémentées à l’aide de mocks, il faut maintenant persister les informations. Pour ce faire, un module de RESTX facilite l’interaction avec la base MongoDB à travers la bibliothèque Jongo. Il a suffi à Xavier de déclarer un objet JongoCollection (qui fait partie du module restx-jongo) pour avoir une base de données MongoDB en mode embarqué dans son backend. Grâce au hot-compile/hot-reload de RESTX, sans relancer le serveur, la couche de persistance a été branchée et Xavier a pu commencer à insérer des données dans MongoDB grâce à l’interface d’administration.
Un petit point sur la sécurité
Par défaut, avec RESTX, toutes les ressources sont sécurisées, c’est-à-dire qu’il faut être authentifié pour pouvoir y accéder. La partie authentification se gère ensuite comme on veut. Pour sa démonstration, Xavier a lui-même implémenté cette partie en ajoutant en base deux objets User et Credential. Mais le développeur a le choix d’utiliser sa propre solution, OAuth ou autre. C’est un avantage de RESTX, il est très modulaire et très peu intrusif.
Et les tests ?
À ce stade de la présentation, les fonctionnalités ont été ajoutées très rapidement mais nous n’avons pas vu un test. Xavier évoque le problème et explique que RESTX propose un module permettant de lancer un serveur RESTX en mode embarqué dans les tests à l’aide d’une Rule JUnit. Il suffit ensuite de spécifier les interactions avec le serveur à savoir les requêtes http qu’il va recevoir ainsi que le résultat attendu. Contraignant à écrire? Pas du tout, RESTX permet de le faire pour vous. Cela fait en effet vingt minutes que Xavier joue avec l’application depuis l’interface d’administration. Il y a donc déjà tout un jeu de données disponible pour un test d’intégration que l’interface va nous permettre de récupérer en générant un fichier YAML descriptif pour le test. Ça y est, nous avons notre test d’intégration d’écrit.
Fin de la démonstration
Maintenant que les ressources nécessaires au front sont écrites et testées, Xavier accède au front de l’application, écrit au préalable de la présentation, et joue un peu avec pour vérifier que le branchement s’est correctement effectué.
La présentation se termine avec quelques explications données rapidement par Xavier pour en savoir plus sur la conception de RESTX, notamment son système d’injection de dépendance maison basé sur des processeurs d’annotations.
Conclusion
RESTX est donc un framework permettant de construire rapidement une API REST, mais pas que. Il propose également un ensemble d’outils intéressants permettant de simplifier la vie du développeur et surtout d’avoir un feedback rapide. L’objectif de Xavier est de développer un outil permettant d’aller vite. Pour cela il s’est inspiré des frameworks modernes et d’outils intéressants comme Play!, Swagger, Infinity test, Dagger.
Les points forts de RESTX:
- l’utilisation de processeurs d’annotations
- un panel d’outils déjà intéressant
- hot-compile/hot-reload
- intégration de mongoDB
- une utilisation aussi bien comme un framework full stack que comme une bibliothèque
- très peu intrusif
C’est un outil qui donne envie d’être testé. Une communauté commence à se constituer autour de ce projet et il me tarde déjà de voir quelles seront les nouveautés de la prochaine release.
À suivre donc.
Ressources
Commentaire
1 réponses pour " [DevoxxFR] Soyons RESTful avec RESTX "
Published by Damien , Il y a 9 ans
Salut Gérôme,
Super ton article ! Une remarque concernant l’injection de dépendance : comme tout est fait à la compilation et que du code est généré, l’injection de dépendance n’utilise pas la réflexion, ce qui permet d’être efficace en perf.
Autre point sympa sur l’injection de dépendance, tu peux ne pas mettre d’annotation sur ce que tu veux te faire injecter, Restx t’injectera alors l’instance du type en question. Ça évite d’avoir du code trop chargé.
Damien R. ;-)