Les clients REST déclaratifs de Spring
L'utilisation des APIs RESTful est devenue un standard pour les applications modernes. Spring Framework, avec son écosystème riche et flexible, offre des solutions élégantes pour consommer ces APIs. En particulier, l'introduction de RestClient
, avec Spring 6.1, apporte une simplicité similaire à celles des Repositories pour les bases de données. Dans cet article, je vais explorer les clients REST déclaratifs avec Spring, en les comparant à l'approche des Repositories
.
Clients REST Déclaratifs avec Spring
Les clients REST déclaratifs de Spring permettent de définir des interfaces Java pour accéder aux services REST. Ces interfaces sont annotées avec des annotations spécifiques pour décrire les appels aux services REST, telles que @GetExchange
, @PostExchange
, @PutExchange
, @PatchExchange
et @DeleteExchange
. Par exemple :
Ces annotations permettent de spécifier les opérations HTTP (GET, POST, DELETE) et les chemins d'accès correspondants, facilitant ainsi la communication avec les services REST dans une architecture de microservices.
Configuration de l'API
Pour configurer les clients REST déclaratifs dans Spring, on peut définir une classe de configuration comme suit :
Explication
Définition du
RestClient
: pour cet exemple, j'utilise comme base l'API JSONPlaceholder (https://jsonplaceholder.typicode.com/users). Notez que l'utilisation de la factoryJdkClientHttpRequestFactory
me permet d'utiliser le nouveau client HTTP introduit en Java 11.Création du client REST déclaratif
UserRestClient
: Le beanuserRestClient
permet d'indiquer à Spring comment créer une instance deUserRestClient
. Cela se fait ici en utilisant la classeHttpServiceProxyFactory
fournie par Spring.
Utilisation du client
Dans mon domaine métier, je définis une interface pour accéder aux utilisateurs indépendamment de la source de données :
Une implémentation de cette interface peut ressembler à ceci :
Maintenant, je peux utiliser UserRepository
dans mes contrôleurs :
Comparaison avec les Repositories de Spring Data JPA
Changement de la source de données
Les Repositories
de Spring Data JPA étant également déclaratifs et basés sur des interfaces annotées. Voici un exemple de repository JPA pour une entité User :
Comme pour les clients REST déclaratifs, l'interface repository est utilisée pour définir des méthodes d'accès aux données sans implémentation explicite. La classe JpaRepository
contenant déjà plusieurs méthodes communes, les autres méthodes de requête peuvent être définies de manière déclarative en suivant les conventions de Spring Data comme findByName
.
Implémentation
Symétrie et avantages comparatifs
Déclaration et lisibilité
Les deux approches offrent une manière déclarative de définir les interactions, que ce soit avec une base de données ou une API REST. Cette symétrie dans la déclaration rend le code plus lisible et maintenable.
Réduction du code boilerplate
Tant les clients REST déclaratifs que les repositories JPA réduisent la quantité de code boilerplate. Les développeurs peuvent se concentrer sur la logique métier plutôt que sur les détails de l'implémentation des accès aux données ou aux services.
Cohérence dans l'écosystème Spring
L'utilisation de ces approches déclaratives dans l'écosystème Spring permet une meilleure cohérence et une uniformité dans la manière de gérer les dépendances et les services, facilitant ainsi la montée en compétence des développeurs.