La conception et l'exploitation de services
Introduction
Le terme de service peut correspondre à plusieurs notions différentes en fonction du contexte dans lequel il survient.
D’un point de vue sémantique, le service exécute un traitement afin de compléter une fonctionnalité du programme considéré. Un service peut donc prendre plusieurs formes différentes.
Il peut s’agir d’un ensemble de classes internes au programme qui rendent un service, par exemple de calcul métier (on parle d’ailleurs de service métier).
Si le service est externe au programme, et donc probablement atteignable par l’intermédiaire d’un accès réseau, il est commun de parler de service distant. Dans le cas où le service utilise le protocole HTTP, il est alors dit "service web".
Enfin, il existe des services spécifiques qui n’utilisent pas de protocoles standardisés et uniformes, et il faut une librairie de communication pour pouvoir les exploiter. C’est notamment le cas pour l’accès au service de gestion de la base de données, pour lesquels il faut spécifier le driver afin d’accéder aux données.
La conception et l’utilisation de ces trois types de services sont prévues par NetBeans et seront couvertes par ce chapitre.
Créer une base de données
Dans le milieu professionnel, les bases de données Oracle, MySQL et PostgreSQL sont fréquemment utilisées par les applications Java. Par défaut, NetBeans met à disposition ces trois drivers, et permet ainsi aux développeurs d’établir rapidement la connexion à une base de données précédemment créée. Ils sont visibles dans l’onglet Services de l’IDE.
Un autre type de base de données est couramment utilisé dans le cadre du développement de projets simples ; il s’agit des bases de données embarquées. Elles sont principalement représentées par Derby ou H2. Ces bases, constituées d’un seul fichier, sont légères ce qui permet de les intégrer facilement à un projet Java ; c’est par conséquent très utile lors des tests d’une application. H2 est une base de données relationnelle développée en Java, reprenant tous les grands principes des bases gros volumes, ce qui s’avère très utile pour les développeurs.
Cette partie a pour but de présenter la création et l’initialisation d’une base de données embarquée H2. Celle-ci servira par la suite de point de départ à la génération de services web en mode REST.
1. Créer une base de données H2
La manipulation ci-dessous décrit, dans un premier temps, l’ajout du driver H2 dans NetBeans. Pour ce faire, il est nécessaire de télécharger sur votre poste le driver, depuis le dépôt Maven, à l’adresse suivante: https://mvnrepository.com/artifact/com.h2database/h2
Pour cet exemple, le JAR le plus récent est utilisé h2-1.4.200.jar.
Depuis l’onglet Services, effectuez un clic droit...
Développer des services REST pour exposer des APIs
REpresentational State Transfer (REST) est un style architectural et un protocole de communication, basé sur HTTP, permettant des échanges entre applications web. Ce protocole est régulièrement utilisé dans le développement, car, par rapport au style SOAP, il est facile d’utilisation et moins coûteux en bande passante.
Ce type de service web augmente la facilité d’accéder à des ressources, car, contrairement à l’approche SOAP, il n’est pas nécessaire de définir un « contrat » (pour SOAP : WSDL) préalable à l’établissement de la communication. En réalité, les éléments sont requêtés par un simple appel d’URL.
L’approche peut en revanche être vraiment identique, à ceci près que les échanges se font en fichier « plat » (traditionnellement JSON), qui est une notation structurée et légère. C’est pourquoi il faut également une librairie pour manipuler ce type de données.
La norme de référence JEE est aujourd’hui JAX-RS 2.0 (Java API for RESTful Services).
Le diagramme ci-dessous montre l’exemple d’un appel REST.
Les outils mis à disposition dans NetBeans permettent la génération automatique des entités et services REST dans un projet web Java, à partir des tables d’une base de données. Si le nombre de services REST à développer est important, la création automatique des classes Java est un gain de temps non négligeable. Lors de l’utilisation de cette méthode, il est important de garder un esprit critique sur ces services générés afin de se demander s’ils correspondent à la fonctionnalité métier ou s’ils doivent être adaptés.
Ce paragraphe a pour but de présenter les principes et verbes utilisés lors de développements REST puis la création et le test de services REST générés grâce à NetBeans. Pour ce faire, l’installation du serveur d’applications Java EE WildFly, sur lequel les services seront déployés, est nécessaire....
Développer des services SOAP
Simple Object Access Protocol (SOAP) est un protocole d’échange d’informations permettant la communication entre deux applications distinctes. Le codage des messages est effectué en XML. Ils sont ensuite transportés par des protocoles comme HTTP ou SMTP. Le protocole de transport HTTP est le plus fréquemment utilisé. Cette approche intègre un système de validation (inhérent au XML) permettant de garantir la bonne structuration des messages. C’est pourquoi cette démarche est particulièrement recommandée lors de l’envoi de données complexes en paramètre des traitements à déclencher.
Il était, jusqu’à Java 6, assez difficile de mettre en place des services web de type SOAP. Il était en effet obligatoire d’utiliser des librairies tierces type Axis (dont le support n’est aujourd’hui plus assuré sous JBOSS 6.3.3EAP), qui imposaient plusieurs phases techniquement lourdes dans le développement de ce type de service.
JAX-WS est une API Java utilisée lors des développements de services Web basés sur le protocole SOAP. Elle comprend des annotations nécessaires à la définition des points finaux des services Web, c’est-à-dire aux adresses permettant d’accéder à un service. Elle permet également le développement des classes de services. JAX-WS utilise Java Architecture for XML Binding (JAXB) pour lier des objets Java à des schémas XML, utilisés dans la construction de messages Soap. Le volume de code lié à la gestion technique des communications a donc diminué d’environ 90 %.
Le diagramme ci-dessous montre l’exemple d’un appel SOAP, ici déployé sur un serveur JBOSS, l’équivalent d’un serveur wildfly.
Cette section a pour but de présenter le développement de services SOAP grâce à un projet Java Spring Boot. Pour ce faire, elle présente la création des entités et des objets de transfert utilisés pour la mise en place des service Soap. La mise en place de l’adresse des services est ensuite exposée, puis leur exécution et leur test.
1. Créer un projet Spring Boot
Spring Boot est une bibliothèque...
Exercice corrigé : développer une API REST avec Spring
Le but de cet exercice est de développer deux services REST, un GET et un POST, permettant de récupérer une liste d’étudiants renseignée dans un fichier de données CSV puis d’insérer un étudiant dans ce fichier.
Pour le développement de ce programme, il est demandé d’utiliser le framework Spring Boot pour la création du projet, ceci afin d’utiliser une application déjà configurée et par conséquent rapide à exécuter sur Tomcat. Lors de la création, il sera nécessaire d’ajouter la dépendance Spring Web afin de pouvoir utiliser les annotations Spring nécessaires au développement des services REST.
Les tests de ces services web pourront ensuite être réalisés avec l’outil Postman.
Les étapes importantes de la réalisation de ce programme sont les suivantes :
-
Créer un projet web Java Maven avec Spring Boot et lui ajouter la dépendance Spring Web.
-
Créer une entité Etudiant contenant les propriétés nom, prénom, mail et date de naissance.
-
Créer une classe EtudiantDAO (Data Access Object) contenant les deux méthodes suivantes :
-
getAllEtudiants : retourne la liste des étudiants présents dans un fichier CSV.
-
add : insère un nouvel étudiant dans un fichier CSV.
-
Créer une classe EtudiantController contenant les deux services REST associés aux méthodes implémentées dans la classe DAO.
-
Exécuter le projet puis tester ces deux services grâce à l’outil Postman.
Le fichier etudiants.csv se situera dans le package src.main.resources.csv du projet.
Pierre,Martin,22/07/1995,pierre.martin@eni.fr
Julie,Durand,14/09/1994,julie.durand@eni.fr
Luc,Dupond,02/10/1990,luc.dupond@eni.fr
1. Créer un projet Spring Boot
La première étape consiste par conséquent en la création d’un projet web grâce à l’outil spring initializr disponible à l’adresse https://start.spring.io/. Cet outil est fréquemment utilisé dans le monde professionnel, car il permet la création de projets préconfigurés...