Les clients riches

| Denis Peyrusaubes | Valtech |

Sacré client ! Léger, riche, lourd, on lui confère toutes les caractéristiques. Si l'on voit tout à fait ce que peuvent signifier léger et lourd, on a du mal à mettre une définition claire sur le terme client riche. L'objectif de cet article est dans un premier temps d'essayer de définir plus précisément ce terme. On verra notamment qu'il n'est pas associé à un produit en particulier, mais il définit plus une famille de technologies qui essayent d'apporter des solutions alternatives au langage HTML qui n'est plus forcement très adapté aux besoins d'aujourd'hui ! ♪

- Titre : Les clients riches

- Auteurs : Denis Peyrusaubes, Valtech

- Parution : 26 mars 2007

- Licence : Copyright ® 2007 Valtech. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Définition

- II. Les clients riches « RIA »

- II-A. XUL

- II-B. Ajax : Asynchronous Javascript and Xml

- II-C. JSF et Atlas

- III. Flash : un candidat sérieux

- IV. Les clients riches « RDA »

- V. Les middlewares dans tout cela ?

- V-A. Les webservices

- V-B. JSON

- V-C. Format propriétaire ?

- VI. Conclusion

- VII. Remerciements

I - Définition

Il est compliqué de définir aujourd'hui le terme client riche. Utilisé par de nombreux éditeurs pour leur solution au goût du jour, il est difficile d'en trouver une définition claire. Je me suis donc prêté à cet exercice en m'appuyant sur tout ce que l'on peut lire sur le sujet dans les médias, mais aussi, et surtout sur mon expérience acquise lors de divers projets web.

Un client riche, c'est :

- une technologie permettant de développer la couche présentation d'une application ;

- la disparition du développement d'application en mode « page » ;

- très bien pourvu en composants graphiques de haut niveau ;

- facilement déployable et « upgradable ».

Si la définition ci-dessus se veut assez générale, on peut classifier les clients riches en deux grandes familles : les « Rich Internet Applications » et les « Rich Desktop Application ».

Ces deux catégories désignent clairement deux types de solutions distinctes sur un point bien précis : la nécessité d'installer (ou pas) un environnement d'exécution quelconque sur le poste client (environnement qui se résume à un simple navigateur dans le cas des RIA). Pour être plus pragmatique, on dira qu'un client riche doit allier à la fois les qualités de déploiement des applications web actuelles, avec la richesse de l'ergonomie des applications de type client lourd.

Figure 1 : Évolution de l'ergonomie

Attention, le terme client riche couvre simplement la technologie permettant d'implémenter la couche de présentation (encadré sur le schéma d'architecture Architecture n-tiers traditionnelle) ! Le terme client riche n'inclut pas le middleware à utiliser pour faire le lien avec le serveur ! L'impact que peut avoir cette partie-là est tel que nous lui consacrerons un chapitre.

Figure 2 : Architecture n-tiers traditionnelle

II - Les clients riches « RIA »

II-A - XUL

À tout seigneur, tout honneur !
Précurseur dans le domaine, XUL est un langage XML de description d'interface graphique. Il est nativement mieux pourvu en composants graphiques de haut niveau que le HTML, et utilise, un modèle de programmation événementiel pour gérer les actions de l'utilisateur (un clic sur un bouton par exemple) : JavaScript et bientôt python. Un point très positif est surtout la qualité de l'intégration de ces deux langages.
XUL a été initialement conçu pour fonctionner dans un navigateur web, à la sauce RIA. L'évolution technologique aidant, des extensions le rapprochant du principe RDA sont en train d'apparaître.

Figure 3 : Un client Amazon développé en XUL

Figure 4 : Exemple de code XUL

<hbox flex="1" id="main-box">
<vbox>
<!-- Tree Overlay -->
<tree id="result-tree"/>
<!-- Details Overlay -->
<hbox id="detail-box"/>
<separator class="groove"/>
<!-- Price Overlay -->
<hbox id="price-box" />
</vbox>
<splitter id="detail-comment" collapse="after" resizeafter="grow">
<grippy />
</splitter>
<!-- Extra Info right panel -->
<tabbox flex="1" id="extra-info-tab">
<tabs id="comment-tab">
<tab label="&info.label;"/>
<tab label="&review.label;"/>
</tabs>
<tabpanels style="background-color: White;" flex="3">
<tabpanel>
<iframe id="allInfo-selected" src="html/allinfo.html" flex="3" />
</tabpanel>
<tabpanel>
<iframe id="comment-selected" src="html/comment.html" flex="3"/>
</tabpanel>
</tabpanels>
</tabbox>
</hbox>

II-B - Ajax : Asynchronous Javascript and Xml

AJAX est le nom donné à une technique de conception de nos pages HTML. Cette technique est loin d'être novatrice : elle fut en effet initiée par Microsoft il y a quelques années maintenant.

Le principe de base d'AJAX se résume en un mécanisme visant à éviter de mettre à jour la page HTML complète à chacune des interactions utilisateur. On est en droit de se poser la question de savoir s'il s'agit véritablement d'un besoin pour améliorer la qualité des interfaces utilisateur… La réponse est sans équivoque : oui. Quelle application de gestion n'a pas besoin de mettre à jour un tableau HTML suite à une action d'un utilisateur ? Peu, voire aucune !

Initialement, les technologies HTTP et HTML ne permettaient d'associer qu'une seule action au clic d'un utilisateur sur un bouton : l'envoi d'une requête HTTP vers le serveur web, requête à laquelle le serveur répondait en régénérant une page HTML contenant le tableau mis à jour. Le navigateur, à réception de cette réponse, se contentait d'effacer la page actuellement à l'écran pour la remplacer par la nouvelle. Cela sous-entend donc que la réponse du serveur web contiendra bien les nouvelles données du tableau, mais elle inclura aussi l'ensemble des informations de présentation de la page le contenant.

Les problèmes qu'induit ce fameux mode page, sont :

- un « scintillement » de l'interface graphique HTML à chaque nouvel événement utilisateur ;

- la nécessité d'implémenter des mécanismes de « mémento » de façon à ce que les champs annexes au tableau soient restitués tels qu'ils étaient préalablement.

AJAX permet donc de compléter ce mécanisme : tout événement sur les composants graphiques du client pourra se voir associer un comportement particulier. Ce comportement pourra être l'envoi d'une requête vers le serveur, mais surtout une régénération partielle d'une partie de la page HTML avec les informations qu'il recevra en retour (dépourvues de toute information de présentation).

AJAX remplace le comportement naturel du navigateur en implémentant lui-même l'action associée à l'événement sur l'IHM et va se charger d'envoyer une requête HTTP au serveur web. Mais, contrairement à une page HTML standard, ce n'est pas le navigateur qui va recevoir la réponse, mais la couche AJAX qui va simplement aller modifier le code HTML de la page courante afin de mettre à jour uniquement la partie correspondant au tableau !

Techniquement, AJAX n'est en fait que l'utilisation conjointe d'un certain nombre de technologies existantes :

- JavaScript pour intercepter les événements et envoyer la requête au serveur web ;

- JavaScript + DOM pour récupérer le résultat et modifier le contenu de la page courante en modifiant l'arbre DOM qui lui est associé.

Si l'on regarde la signification de l'acronyme AJAX, le X représente XML, et fait référence au format des données que l'on peut envisager d'utiliser pour permettre au serveur web d'alimenter les requêtes en provenance de la couche AJA ? Ce point-là sera approfondi dans le dernier chapitre.

Figure 5 : Mode de fonctionnement d'AJAX

II-C - JSF et Atlas

Il est difficile d'évoquer AJAX sans évoquer un certain nombre de problèmes qui risquent de découler de son utilisation (nous avons déjà un retour d'expérience sur l'utilisation des technologies JavaScript, CSS, DOM et HTML). Parmi ces problèmes, on peut en retenir deux :

- la complexité des pages : un mélange HTML, DOM, JavaScript rend difficile le débogage ainsi que la maintenance évolutive et corrective ;

- une réutilisation des composants « ajaxisés » assez délicate et finalement assez limitée.

Microsoft proposera dans la prochaine version de « Visual Studio » un certain nombre de composants incluant des comportements de type AJAX. Dans le monde Java, le framework JSF permet la même chose, à la différence qu'il s'agit d'un framework extensible, qui vous permet donc de capitaliser sur des composants correspondant à vos besoins spécifiques.
Ces frameworks nous permettent donc d'espérer pouvoir répondre favorablement aux points négatifs cités précédemment en rendant le processus de développement des pages HTML beaucoup moins technique et plus assisté par les outils de développement.

Figure 6 : Utilisation d'un composant JSF AJAX dans Sun Java Creator

III - Flash : un candidat sérieux

Tout le monde connaît Flash (Adobe) comme l'outil permettant de développer des petites animations qui « égayent » vos pages web. Il fonctionne suivant le principe d'un plugin du navigateur web qui doit être installé sur le poste qui va l'exécuter. L'image que l'on se fait de Flash est maintenant obsolète ! Il est désormais devenu un outil de développement d'interface homme machine pourvu de composants graphiques de haut niveau (onglet, menu, menu déroulant…), et d'un look très séduisant. Il bénéficie de plus d'un mécanisme de déploiement hérité de ses versions précédentes : simplement téléchargé par un navigateur et exécuté par le plugin Flash (installé sur 95 % des postes connectés à Internet).

Plusieurs technologies permettent aujourd'hui de développer une application Flash, les principales étant :

- FLEX (Adobe). Payant. Pourvu d'un environnement de développement wysiwyg ;

- Laszlo. Open Source. Un outil de développement est fourni par IBM sous forme d'un plugin d'Eclipse.

Les deux solutions proposent finalement le même type de résultat : une application Flash. Ils se différencient simplement sur leurs propriétés intrinsèques, à savoir leur coût de licence, la qualité de l'outillage qui leur est associé…

Figure 7 : Exemple d'application Flash développée avec Flex

Figure 8 : Exemple d'application Flash développée avec Laszlo

IV - Les clients riches « RDA »

Plusieurs technologies partent sur une solution technique bien plus radicale : la fin de l'utilisation du navigateur web comme « conteneur d'application ». Mais, si le navigateur web n'est plus utilisé pour télécharger et afficher la couche de présentation, qui s'en charge ?

La réponse à cette question dépend de la technologie choisie. En tout état de cause, il est nécessaire que ce nouveau conteneur soit installé sur le poste qui exécutera l'application, rendant non accessible l'application depuis un poste banalisé. Attention de ne pas assimiler le conteneur à l'application ! Le conteneur fournira un socle d'installation et déploiement, de mise à jour et d'exécution aux futures applications.

Parmi les solutions techniques de type RA qui tiennent le haut de l'affiche, l'une des principales est celle d' « Eclipse RCP » (« Rich Client Platform ») ; on trouve aussi une version « desktop » du produit FLEX vu précédemment, ainsi qu'à un niveau plus avancé le futur système d'exploitation Windows (nom de code « vista »), qui intègre directement le moteur de rendu dans le système d'exploitation.

Figure 9 : Exemple d'application RDA avec Eclipse RCP

V - Les middlewares dans tout cela ?

Si l'on constate que tout le monde s'agite sur les technologies client riche, une petite part seulement de cette agitation concerne le middleware qui sera utilisé par cette interface cliente pour dialoguer avec la couche applicative qui demeure physiquement sur le serveur d'application.

HTTP semble le protocole réseau incontournable dans l'architecture générale mise en œuvre par une solution de type client riche. Compatible avec les problématiques de déploiement, son adoption ne nécessite pas de grand changement en ce qui concerne l'infrastructure serveur, et l'utilisation de HTTPS permet de mettre en œuvre un dialogue crypté entre le client et le serveur, et ce, de façon aisée. Il reste maintenant à déterminer ce que l'on va faire passer dessus, et là, plusieurs solutions sont envisageables :

V-A - Les webservices

Les webservices se placent ici en grandissimes favoris… L'utilisation d'une pile SOAP sur le client permet d'envisager une interopérabilité satisfaisante entre le client et le serveur, en particulier lorsque ces deux couches ne sont pas implémentées avec les mêmes technologies. Quelques lacunes d'interopérabilité sont néanmoins à gérer, notamment en ce qui concerne la gestion de l'authentification, ainsi que la mise en œuvre de discussions « transactionnelles » entre le client et le serveur.
Un mode dégradé peut aussi convenir : l'utilisation des web services sans utiliser SOAP, mais en véhiculant simplement des flux XML dont on aurait la maîtrise côté client et côté serveur.

V-B - JSON

JSON est un modèle de décomposition d'information de façon structurée, mais moins verbeuse que XML. Son utilisation nécessite l'emploi d'un parseur (il existe un parseur développé dans de nombreux langages, ce qui laisse espérer une interopérabilité réelle).

V-C - Format propriétaire ?

Reste encore la possibilité d'utiliser un protocole totalement propriétaire entre le client et le serveur. Cette solution peut d'ailleurs être utilisée avec Flex afin de véhiculer des données préformatées entre le client et le serveur (un « datagrid » par exemple).

VI - Conclusion

On ne peut pas remettre en cause aujourd'hui la nécessité de faire évoluer les technologies clientes. Les solutions proposées demeurent techniquement différentes et à des degrés de maturité inégaux. Un frein risque d'apparaître sous peu pour le développement d'applications véritablement performantes : le sacro-saint protocole HTTP qui, de par son mode déconnecté, ne favorise pas (voire limite) la mise en œuvre d'application fortement transactionnelle et/ou sécurisée !

VII - Remerciements

Cet article a été mis au gabarit de developpez.com : voici le lien vers le PDF d'origine : AR02-ClientRiche-Article.pdf.

L'équipe Java de Developpez.com tient à remercier la société Valtech pour la mise à disposition de cet article aux membres de Developpez.com.

Nous tenons à remercier également ced pour sa relecture attentive de cet article et Régis Pouiller pour la mise au gabarit.