XMLHttpRequest, fonctionnalités et simplicité

XMLHttpRequest est un objet Javascript que les développeurs web peuvent utiliser dans leur page web pour effectuer des requêtes HTTP directement depuis leur script, sans passer par le chargement d'une page dans le navigateur.

Dans le cadre de mon travail, j'ai récemment eu à utiliser cet objet de manière assez intensive. Ayant suivi pas mal d'articles à son propos et l'ayant un peu utilisé pour divers tests, je me suis lancé tête baissée dans un code qui ne s'est finalement pas révélé si simple à écrire...

Je passerai sur la présentation de l'objet XmlHttpRequest, il existe de nombreuses documentations sur Internet qui vous permettront de commencer à écrire des scripts utilisant cet objet. Cependant, en effectuant une utilisation plutôt intensive de cet objet, j'ai pu remarquer que ces documentations restaient toujours muettes sur de nombreux aspects problématiques.

Un script de test utilisant cet objet consiste souvent à envoyer une simple requête vers une URL et à recevoir la réponse à cette requête dans une fonction callback fixée par l'utilisateur. Rien de plus simple me direz-vous ? En apparence en effet.

Il existe pourtant deux points qui rendent l'utilisation de cet objet non triviale dans une vraie page web dynamique :

  1. il n'existe aucun moyen de vérifier que la connexion avec le serveur a bien été établie ;
  2. il n'existe aucun moyen de spécifier des callbacks indépendantes pour chaque requête.

Le premier point est très grave. Lorsque vous effectuez une requête HTTP vers un serveur distant, il n'existe aucune raison que ce serveur soit disponible. Bien sûr, c'est peu probable, car le serveur appelé est souvent le même que celui de la page web, il est donc disponible puisque la page web vient de s'afficher. Voilà une affirmation bien fausse. Ce n'est pas parce que vous venez de charger une page web que le serveur ne vient pas de tomber quelques secondes plus tard, de plus, rien ne garantit que l'application web que vous développez n'est pas destinée à fonctionner plusieurs heures sans jamais recharger la page principale (ce qui était mon cas), laissant ainsi largement le temps au serveur de tomber pour surcharge ou maintenance.

Le second point est moins grave, mais ennuyeux. Rares sont les applications web qui font toujours les mêmes requêtes. Il y a bien sûr ceux qui ont pensé à élaborer un protocole de communication assez simple afin d'avoir des fonctions de communications génériques. Cela permet de toujours utiliser la même fonction callback pour gérer les communications. Cependant, il est des cas où on ne contrôle pas ce que le serveur retourne (c'était mon cas), dans ce cas il est souvent nécessaire de mettre en place des fonctions callback différentes selon les différents types de réponse que l'on peut recevoir. La seule solution correcte dans ce cas est de créer autant d'objet XMLHttpRequest que de types de communication. Voilà qui n'est pas très pratique pour le développeur.

Selon moi, l'objet XMLHttpRequest marque un tournant dans la vie des développeurs d'applications web qui ne sont enfin plus dépendants du chargement des pages web pour récupérer des données depuis un serveur distant. Cependant, il existe encore des petites anomalies dans sa conception qui me font dire que son utilisation n'est pas encore à la portée de tout le monde, en tout cas pas pour réaliser des applications de qualité.

Pour continuer dans la veine du précédent billet, il est clair que le futur sera aux évolutions des langages de balisage (XUL, extension du HTML, XHTML 2, etc.) afin de redonner plus de responsabilités au navigateur et de revenir à plus de simplicité dans le développement d'applications web permettant ainsi de les fiabiliser plus facilement.

Haut de page