Les service web sont par définition indépendants d’une technologie et interopérables, c’est à dire compatible entre différentes technologies (comprendre système d’exploitation ou langages). Il y a donc différentes façon de construire des services web, au moins une par technologie et surement des bonnes pratiques pour assurer cette interopérabilité.
J’ai listé ici les différents frameworks de Web Services (SAOP, WDSL & cie) pour quelques technologies.
Commençons par celui ce que je connais le mieux…
Frameworks pour Java
La spécification JAX-WS (Java Api for Xml Web Services) définit les API et les outils pour implémenter SOAP 1.1 et WSDL 1.1 en java.
JAX-WS est disponible d’office dans l’environnement virtuel client Java SE (Standard Edition) depuis la version 1.6.
Suite à la création de cette spécification, il y a un vaste choix de frameworks de Web Services pour java. En voici quelques uns, détaillés par la suite :
- Apache Axis2
- Glassfish Metro
- Apache CXF
- JbossWS
- Oracle Weblogic Application Server
- IBM WebSphere Application Server
Apache Axis 2
Apache Axis2 n’implémente que SOAP et WSDL mais possède une architecture modulaire autorisant le rajout de modules qui apportent de nouvelles fonctionnalités.
Par exemple le module Apache Rampart est une implémentation des normes WS-Security 1.0/1.1, WS-SecureConversation, WS-SecurityPolicy 1.1/1.2, WS-Trust, etc.
Il existe d’autres modules pour les normes WS-Addressing, MTOM ou XML-RPC. Et d’autres modules pour fournir de nouveau moyen de transports de messages SOAP : via TCP, UDP, email, SMS, XMPP (protocole de tchat), file JMS, etc.
Apache Axis2 est une réécriture de Apache Axis, framework pionner dans l’implémentation des Web Services en java, c’est probablement pour cette raison qu’il n’est pas conforme à
JAX-WS.
Glassfish Metro
Il s’agit de l’implémentation de référence de JAX-WS coté serveur, ce framework propose des librairies java rigoureusement conforme à la spécification, sans fonctionnalités supplémentaires.
C’est un module du serveur d’applications J2EE (Java 2 Entreprise Edition, la version serveur de l’environnement virtuel java) Glassfish de Sun/Oracle.
Apache CXF
Apache CXF est l’implémentation standard de JAX-WS faite par la fondation Apache en plus d’Axis2.
Ce framework est compatible avec les normes WS-Addressing, WS-Policy, WS-ReliableMessaging, WS-Trust (partiellement), MTOM et WS-Security.
Ce framework est indépendant d’un serveur d’application J2EE et est conçu pour être utilisable avec le framework Spring IoC (Inversion of Control) d’assemblage de composants logiciel java avec XML.
JBossWS
JBossWS est l’implémentation standard de JAX-WS pour le serveur d’application JBoss. Cette implémentation s’appuie sur divers frameworks java libre et depuis la version 4 du serveur d’application JBoss, JBossWS est une intégration de Apache CXF dans le serveur d’application grâce à Spring.
Oracle Weblogic Application Server
Le serveur d’application J2EE Weblogic d’Oracle (historiquement le serveur a été créé par la société BEA Systems) est compatible avec JAX-RPC (Java API for Xml based RPC) au lieu de JAX-WS.
Ce serveur est bien sur, comme Axis2, compatible avec SOAP 1.1 et WSDL 1.1. Il est également compatible UDDI 2.0, et propose des solutions propriétaires pour la gestion des problématiques de sécurité et de communications asynchrones.
IBM WebSphere Application Server
Le serveur d’application J2EE WebSphere 7 d’IBM est compatible avec JAX-WS,WSSecureConversation, WSTrust, WSSecurityPolicy, WSPolicy, WSAddressing,WSMetadataExchange, WS-ReliableMessaging, WS-Trust, MTOM, d’autres normes de WebServices du W3C et d’autres normes définies par l’OASIS (Organization for the Advancement of Structured Information Standards), un consortium d’entreprise de l’informatique dont l’objet est de promouvoir l’adoption de standards informatiques.
C’est apparemment la solution la plus riche en termes de normes de Web Services implémentées, pour java et pour tous les langages et tous les systèmes d’exploitation confondus.
Frameworks pour .Net
Pour les langages gérés par le framework .Net (C#, VB.Net, etc.), le choix se pose entre WSE est WCF (Windows Communication Framework, le remplaçant plustôt qu’une alternative en fait). Les différences les plus notables sont :
- WCF est la dernière implémentation SOAP de Microsoft pour .Net 3.0 ;
- les performances de WCF sont augmentées de 200 à 400% par rapport à WSE ;
- WCF implémente un plus grand nombre de normes WS-*.
Donc pour faire du WebService sur .Net il faut utiliser WCF et .Net 3.0 minimum
Frameworks pour C++
Pour C++, les frameworks les plus connus sont Axis for C++ de la fondation Apache, et gSOAP, les différences les plus notables sont les suivantes :
- Axis for C++ :
- fonctionne sous Windows et Linux ;
- fonctionne comme un serveur HTTP indépendant ou en module pour le logiciel de serveur web Apache Httpd ;
- dispose d’une IHM WEB pour le déploiement des Web Services à chaud
- ne supporte que les normes SOAP et WSDL, et contrairement à Axis2 pour java, il ne dispose pas d’une architecture modulaire le rendant extensible.
- gSOAP :
- fonctionne sous Windows, MacOS, Linux, Unix et OpenVMS
- supporte les normes SOAP, WSDL et UDDI.
- support des normes WS-* suivantes :
- WS-Policy 1.2/1.5 et WS-SecurityPolicy 1.2
- WS-Security (2004/01),
- WS-Addressing (2003/03, 2004/03, 2004/08, 2005/03)
- WS-ReliableMessaging
- WS-Discovery (partiellement)
- Compatible XML-RPC
- Permet de faire des appels SOAP sur UDP
- Fonctionne en mode serveur HTTP autonome ou en module pour les logiciels de serveur web IIS et Apache Httpd ;
gSOAP paraît être le framework préférable pour une application en C++ utilisant les Web Services, sous Windows ou sous un autre système d’exploitation.
Frameworks pour d’autres langages
Pour perl, le seul framework disponible semble être SOAP::lite, une collection de modules perl pour le logiciel de serveur web Apache Httpd, ce framework ne gère que SOAP et WSDL.
Pour PHP, il est possible d’utiliser NuSOAP, un ensemble de classes PHP à utiliser coté serveur fournisseur de Web Services, compatible avec SOAP 1.1 et WSDL 1.1 uniquement.
Pour python, il est possible d’utiliser Zolera SOAP Infrastructure (ZSI), un paquetage Python compatible là encore avec SOAP 1.1 et WSDL 1.1 uniquement.
Conclusions
Pour assurer l’interopérabilité entre les technologies je ne m’aventurerais pas au-delà de SOAP1.1 et WSDL1.1