Les petites cases

Xforms et Web services en REST

J'ai fait allusion dans un billet récent à Xforms, une norme mise au point au W3C vouée à remplacer nos bons vieux formulaires HTML. J'avais cité l'exemple mis au point avec Flickr par Allan Beaufour, le développeur de l'implémentation de Xforms pour les produits Mozilla, exemple issu d'un tutoriel sur Xforms. Sur ma lancé de la découverte des Web services, j'ai repris cet exemple et j'ai essayé de l'adapter à différents Web services. Je vous propose ici le résultat de mes tests du week-end :

  1. Rechercher le temps qu'il fait dans différentes villes de France avec Yahoo! Weather

  2. Rechercher les informations d'un ouvrage dans Amazon grâce à l'ISBN

  3. Rechercher le NSID d'un utilisteur de Flickr à partir de son nom d'utilisateur

  4. Rechercher les informations d'une photo dans Flickr à partir de son identifiant

  5. Rechercher toutes les photos avec un tag et/ou un utilisateur particulier

Pour utiliser ces exemples, vous devez installer l'extension Xforms pour firefox 1.5.0.2, puis autoriser les requêtes Xforms pour le domaine 'lespetitescases.net' (aller dans les préférences de votre firefox, onglet 'Contenu' puis cliquez sur 'Allow Xforms to submit data to other domains' et ajouter le domaine dans la liste 'Allowed sites').

Rentrer dans les détails de Xforms serait trop long et j'en suis incapable. Mais, plusieurs possibilités offertes par Xforms m'ont servi pour ces exemples. Non seulement, il est possible de structurer en XML la requête envoyée au serveur mais aussi, d'importer directement dans la page du formulaire la réponse en XML issue d'une requête à un Web-service et d'en contrôler l'affichage en parcourant l'arbre avec des expressions Xpath. Il est donc très simple d'interroger un Web service utilisant les protocoles SOAP ou REST. Pour des raisons de simplicité, je me suis contenté de Web services en REST (pour SOAP, je vous renvoie à cet article du site Developper Works de IBM).

Un des avantages de cette méthode d'interrogation est de se passer d'API et de langages de programmation. De l'interrogation à l'affichage des résultats, tout est géré par le même formulaire Xforms et en seulement quelques lignes. Comme je ne suis pas un fervent codeur, ni même admirateur des langages de programmation, cette méthode me paraît bien plus simple, mais il ne s'agit que de mon avis. Dans ce cas, l'ensemble du processus de requête et d'affichage des résultats se situe côté client ; grâce à Xforms, il est possible de se passer d'un serveur Web implémentant un langage de programmation quel qu'il soit (PHP, ASP, Python...) pour pouvoir tester et même interroger un Web service.

Évidemment, cette méthode n'est pas exempte de limites. Ainsi, il n'est pas possible d'effectuer une requête intégrant des méthodes différentes d'un Web service avec un seul formulaire Xforms (ou du moins, je n'ai pas trouvé comment faire, si c'est possible). C'est pourquoi j'ai créé trois formulaires différents pour interroger Flickr, alors qu'il est possible de le faire avec un seul formulaire avec une API comme phpflickr. Le Web service d'Amazon m'a posé un autre souci à cause de l'espace de noms XML par défaut, mais il me semble que c'est un bug dans l'extension Xforms et cela devrait être résolu. En attendant, cet exemple possède un comportement parfois bizarre.

Pour conclure cette séance de test, il me semble que Xforms représente une belle avancée pour créer les applications Web de demain (3.0 ou 4.0 ;-) ). Il faut espérer que son implémentation dans Firefox sera suivie par d'autres (SVG est maintenant implémenté dans Safari et Opera). Pour autant, certaines voix se sont élevées pour dénoncer la difficulté de Xforms, ce n'est pas entièrement faux, surtout si on les compare à nos formulaires Web actuels. Je dois aussi ajouter que la rédaction de la recommandation du W3C est une horreur, je n'avais jamais lu une recommandation aussi mal écrite et aussi peu claire (Karl si tu me lis ! Au secours ! Il faut faire quelque chose). Pour autant, cette norme permet d'effectuer des choses qu'il est actuellement impossible de faire sans l'utilisation de langages de programmation et il me semble que l'apprentissage et l'utilisation d'un langage de programmation n'est pas le plus simple. Il faut aussi ajouter que Xforms est indépendant de la plate-forme utilisée.

Finalement, comme le rappelait Karl récemment dans son billet sur le futur de HTML, le débat entre XHTML 2 et HTML 5 relève de communautés Web différentes et j'ajouterai qu'il vire à la « guerre des religions » stérile du style « Mac ? ou PC ? » ou « KDE ? ou gnome ? ». Il me semble que pour Xforms, le problème est exactement le même. Me rattachant plus facilement à la communauté XML (la même qui supporte plutôt XHTML 2), il n'est donc pas curieux que Xforms m'ait attiré ;-) Choisissez votre camp en bonne intelligence et avec tolérance :-)

Web Navigateur Web services XHTML Geekeries — 

Commentaires

C'est là qu'on voit que ce week end a duré trois jours ;-)
pour avoir une intro sur xforms : http://ljouanneau.com/blog/2006/04/05/544-xforms-vs-ajax-1---0

>il n'est pas possible d'effectuer une requête intégrant des méthodes différentes d'un Web service avec un seul formulaire Xforms

en mettant plusieurs balises submission, et un bouton submit pour chaque ? -> un même formulaire, mais différente façon d'envoyer.

>certaines voix se sont élevées pour dénoncer la difficulté de Xforms, ce n'est pas entièrement faux, surtout si on les compare à nos formulaires Web actuels

oui mais non. Comme tu l'as évoqué, faire un formulaire html avec des fonctionnalités équivalentes à Xforms requiert une tonne de ligne de code JS. Donc un savoir-faire en programmation. Donc non, Xforms n'est pas plus compliqué quand on veut faire un vrai formulaire. Je dirais même au contraire, grâce à son aspect déclaratif (ce qui ne nécéssite pas de connaissance en programmation).
arf, désolé, la mise en forme n'a pas été prise en compte. Donc, pour avoir une intro sur xforms : http://ljouanneau.com/blog/2006/04/05/544-xforms-vs-ajax-1---0. Tu disais : "il n'est pas possible d'effectuer une requête intégrant des méthodes différentes d'un Web service avec un seul formulaire Xforms". Et en mettant plusieurs balises submission, et un bouton submit pour chaque ? -> un même formulaire, mais différente façon d'envoyer. Tu disais "certaines voix se sont élevées pour dénoncer la difficulté de Xforms, ce n'est pas entièrement faux, surtout si on les compare à nos formulaires Web actuels". Oui mais non. Comme tu l'as évoqué, faire un formulaire html avec des fonctionnalités équivalentes à Xforms requiert une tonne de ligne de code JS. Donc un savoir-faire en programmation. Donc non, Xforms n'est pas plus compliqué quand on veut faire un vrai formulaire. Je dirais même au contraire, grâce à son aspect déclaratif (ce qui ne nécéssite pas de connaissance en programmation).
Merci Laurent pour le commentaire. Pour la mise en forme, il faut utiliser du HTML, je l'ai rétabli et il faut que je pense à l'indiquer.
J'avais déjà cité ton article sur Xforms dans un précédent billet : Quoi de neuf du côté de XML ces derniers temps
Oui, effectivement, on peut avoir différents boutons de soumission, j'avais d'ailleurs testé cette possibilité. Mais, ce qui serait intéressant, c'est de n'avoir qu'un bouton de soumission pour interroger une méthode puis récupérer le résultat pour interroger une autre méthode.
Tout à fait d'accord avec toi pour la troisième remarque, c'était d'ailleurs le sens de ma remarque, mais je me suis mal exprimé.