WS-* (Webservices & co). La fause bonne idée mais vraie castastrophe …
Ce sujet est tabou car le marketing a frappé. Cependant quelques voies s’élèvent :
Ils ne sont pas connus mais resument bien les problèmes :
Pourquoi en vouloir aux WS-* ?
Les raison sont nombreuses. 2 approches sont possibles pour contester les WS-*.
1 – L’approche scientifique
Le rasoir d’Ockam est un principe de raisonnement de la science fondamental, il correspond au principe de simplicité.
“Le principe du rasoir d’Ockham consiste à ne pas utiliser de nouvelles hypothèses tant que celles déjà énoncées suffisent, à utiliser à fond les hypothèses qu’on a déjà faites, avant d’introduire de nouvelles hypothèses, ou autrement dit à ne pas apporter aux problèmes une réponse spécifique, ad hoc, avant d’être (pratiquement) certain que c’est indispensable (sinon on risque d’escamoter le problème, et de passer à côté d’un théorème ou d’une loi physique).”
(Wikipedia)
De quoi part-on avant les webservices ?
- du protocole http qui fonctionne dans le monde entier, normalisé, millions d’utilisateurs
- du protcole xml et de ses dérivés comme xhtml : millions d’utilisateurs également, normalisés…
Quels sont les objectifs des WebServices ?
- faciliter l’intégration avec une approche service
- faire de l’objet reparti
Dans le premier cas, il faut constater que le protocole http et comme format xml (eventuellement xhtml) fonctionnent déjà et sont très simples et bien normalisés et stables (la dernière mise a jour d’Xml c’est pour gérer les derniers ajouts d’Unicode qu concernait quelques langues asiatiques disparues depuis quelques sciècles… ).
Il n’existe pas de raison particulière de rajouter des protocoles au dessus en dehors de couches applicatives (schema de format de tansfert de fond, commande…).
Les couches WS-* n’apportient rien de probant en matière d’échange de documents, il s’agit même de reculs par rapport au simple http/xml. Prennons pour exemple la sécurité, avec http il suffit de certificats pour passer en https, avec les web services il faut plusieurs protocoles qui sont rarement gérés par les produits qui gèrent les webservices.
Cette approche pourrait être quantifiée avec une utilisation des théories de Kolmogorov.
Les 2 plus petit programme permettant un échange de documents entre systèmes seront plus petits avec http/xml qui WS-*. Cela peut se voir en pratique grâce a amazon qui a implémenté des services de stockage avec les 2 appoches, il suffit de comparer ce qui passe sur le réseau dans les 2 cas.
l’approche REST c’est :
- les URI pour annuaire
- le protocole applicatif Http avec ses verbes (put,get,post, delete,head). Ne pensez pas que c’est simple, le célèbre sql a les mêmes (select,update,delete,insert).
- sécurité X.509.
Les spécificateurs ont tenté de reinventer les choses :
- annuaire UDDI : les serveurs sur internet ont d’ailleurs été arretés, personne ne s’en servait
- pas de verbes strandards. C’est selon le bon vouloir des développeurs.
- sécurité très difficile a implementer.
Pourquoi ont-ils du mal ? car ils cherchent a faire des protocoles applicatifs au dessus de protocoles applicatifs (http, smtp…). Http n’est pas un protocole de transport ! Leur approche n’aurrait de sens d’un point de vue protocoles que s’ils étaient au dessus de TCP/IP. Vouloir faire des protocoles applicatifs au dessus de protocoles applicatifs n’a pas de sens et mene a l’impasse car on pourrait également considérer SOAP comme un protocole de transport et rajouter une couche au dessus (tiens, c’est ce qu’ils font…) et ainsi de suite a l’infini… c’es ce qui se passe tous les jours, le nombre de normes croit sans fin. Il y a tellement de normes qu’il est nécessaire de rajouter le concept d’ESB pour faire parler tous ses dialectes d’XML.
L’aute objectif de WS-* c’est de refaire de l’object réparti. Vous avez entendu parler de Corba ? cette merveille technologique normalisée avec annuaire, decouverte des objets sur le réseau, multi plateforme, multi languages et multi echecs ? et oui, ca n’a pas marché. Quelles sont les raisons qui font que ca peut marcher mieux maintenant ? aucunes, par contre Corba avait l’avantage d’être plus simple.
Quelles sont les difficultées de ce type d’approche ?
- Etre multi langage aligne tout le monde sur un minimum commun ce qui ne satisfait personne. Qui voudrait developper en java sans profiter des améliorations ? donc les normes vont evoluer pour prendre en compte les ajouts des langages. Il ne peut donc pas il y avoir retro compatibilité et tous les langages ne suivent pas. Comme tous les langages ne progressent pas dans les mêmes directions ca devient la tour de babel rapidement. Donnons un exemple pratique, les templates ne sont gérés que par C# et java 1.5 avec des différences… comment faire communiquer ces langages avec ruby ? et serait-il pertinent d’ajouter tous ces concepts complexes à tous les langages pour interopérer ? est ce que ca ne rendrait pas tous les langages comples ? Ce couplage est-il lache ?
Comme les réponses sont non, non et non vous en conclurez la même chose que la recherche d’H.P.
De plus, comme l’a avoué un des concepteurs des web services, vouloir sérialiser les objets dans du xml est bien plus complexe que l’on ne croit ! (article ici)
Libre a vous de penser que toutes ces normes sont utiles !
2 – L’approche par l’expérience
Est-ce que l’experience montre une facilité certaine qui deconcerterait la théorie ?
Pas vraiement. 90% des services d’amazon sont appelées en mode REST et si vous lisez les commentaires a cet article , vous decouvrirez qu’a piori les web services d’amazon sont construits au dessus des services REST.
Les Web services fonctionnent bien lorsque l’environnement des très homogène (Webshere du développement à l’execution, ou visual studio…). Dés que vous mélangez ca se corse ! C’est etonnant d’arriver a se constat alors que l’objectif était justement de faciliter l’interopérabilité… Les éditeurs tiennent décidement bien a leur client, ils les fidelisent … Voici un petit article du MSDN de Microsoft pour expliquer comment faire. Notez bien les prerequis au départ (en version … ). Notez que c’est le cas simple dans lequel les utilisateurs se mettent souvent (SOAP 1.1). Si vous voulez utiliser le messaging, la reliability… ca devient tout un poème que d’arriver a faire communiquer 2 applications ! (quel recul !).
3 – pourquoi certains en font ?
- parce que dans les outils de developpement il est simple de transformer un objet en web services. en Dotnet il suffit de rajouter [webmethod] devant une méthode ! Ces services sont ensuite très facilement utilisables depuis le même outil de développement, c’est comme si on utilisait la classe directement (je n’ai pas contre pas bien compris pourquoi on se compliquait la tâche en instanciant pas directement cette classe…)
- parce que c’est a la mode, les editeurs mettent ca en avant partout dans le moindre produit. Si vous ne faites pas de Webservices vous etes dépassé …
- ca permet de vendre de nombreux produits (pour faire et utiliser des webservices il faut des produits lours et payants), pour interopérerer il faut des ESB, bref du bonheur pour les éditeurs.
Résumé
- dans les meilleures pratiques sur les Web services, il y a la nécessité de concevoir la structure des données echangées avant de coder ce qui revient a echanger des documents xml a la structure formalisée.
- Le principal protocole utilisé pour les webservices est http, il n’y a pas de reel besoin de faire des webservices au dessus d’autres protocoles a part pour l’approche demo
- il n’y a pas de moyen d’adresser les resosurces car l’annuaire UDDI a échoué
REST de son coté c’est :
- un moyen d’adressage simple, universel et en place chez des millions de personnes (URI)
- permet des échanges que se soit en xml et schema xml mais il est également possible d’échanger des video en streaming, des images, documents word …
- ca marche depuis longtemps !
Sur la base de ses bonnes pratiques, et pour respecter un principe scientifique (application simple du principe d’ockam), il faut respecter le style REST. Sortir du style REST c’est sortir des principes scientifiques. et la vous pouvez faire ce que vous voulez (Webservices over X.400 encapsulant du TCP.IP… )