1/21 Programmation Web Avancée Thierry Hamon Bureau H202 - Institut Galilée Tél. : 33 1.48.38.35.53 Bureau 150 LIM&BIO EA 3969 Université Paris 13 - UFR Léonard de Vinci 74, rue Marcel Cachin, F-93017 Bobigny cedex Tél. : 33 1.48.38.73.07, Fax. : 33 1.48.38.73.55 thierry.hamon@univ-paris13.fr http://www-limbio.smbh.univ-paris13.fr/membres/hamon/pwa-20122013
2/21 Encore plus dynamique! Evolution du Web Génération 1 : HTML statique (1993 Web 1.0), CSS (1996) Génération 2 : Application Web à l aide du HTML et de bases de données (HTML dynamique, XML 1994/2000 Web 1.5) Génération 3 : Services Web (2005 Web 2.0)
3/21 Service Web Définition : Application accessible depuis le Web fournissant des données des services à d autres applications un objet métier pouvant être déployé sur Internet Utilisation des protocoles standard d Internet (SOAP, HTTP) d un langage standard pour décrire son interface (WSDL, XML)
4/21 Service Web Caratéristiques Faible dépendance vis-à-vis des technologies et des protocoles plate-forme (UNIX, Windows,...) implémentation (VB, C#, Java,...) architecture sous-jacente (.NET, J2EE, Axis...) Réutilisation dans un environnement ouvert
5/21 Objectifs Remplacement des protocoles actuels (RPC, RMI, DCOM) Interopérabilité et interaction des serveurs Web et de composants hétérogènes Généralisation des serveurs Web utilisant des CGI Indépendance des composants grâce à un protocole standard SOAP Approche pour les applications B2B (Business to Business), EAI (Enterprise Application Integration) et P2P (Peer to Peer)
6/21 Protocoles et technologies associés Définition d objets distribués, basés sur des standards XML Protocole de communication des services Web : SOAP Description des services Web : WSDL ( IDL) Enregistrement et découverte de services Web : UDDI Standards du W3C : XML, SOAP, WSDL Standards industriels : UDDI, ebxml Propriétaires : DISCO, WSDD, WSFL, ASMX,... Implémentations actuelles : Microsoft.Net Sun JavaONE : J2EE + Web services (WSDP = JAXP, JAX-RPC, JAXM...) Apache XSOAP / Axis, IBM WSTK Oracle, Bea, Iona, Enhydra...
7/21 Exemples de services existants Google (http://www.google.com/apis/) : accès gratuit mais limité (1000 requêtes par jour après enregistrement). Trois opérations : recherche obtention d une page depuis le cache correction orthographique Amazon (http://associates.amazon.com/exec/panama/ associates/join/developer/resources.html) : accès gratuit mais limité (1 requête par seconde après enregistrement), opération de recherche et de gestion de panier d achats
8/21 Structure d un service Web Architecture de base Trois composants : Fournisseur de service (service provider) : définit le service publie sa description dans l annuaire réalise les opérations Annuaire (discovery agency) : reçoit et enregistre les descriptions de services publiées par les fournisseurs reçoit et répond aux recherches de services lancées par les clients Client (service requestor) : obtient la description du service grâce à l annuaire utilise le service
9/21 SOAP SOAP (Simple Object Access Protocol) version 1.1 : mai 2000 (http ://www.w3c.org/tr/soap/) version 1.2 : en cours (CR en décembre 2002) Cadre général permettant l échange de données structurées au format XML Protocole de transport de ces données basé sur HTTP
10/21 SOAP <? xml v e r s i o n= 1.0 encoding= UTF 8?> <e n v : E n v e l o p e x m l n s : e n v= h t t p : // schemas. xmlsoap. org / soap / e n v e l o p e / x m l n s : x s i= h t t p : //www. w3. org /1999/XMLSchema i n s t a n c e x m l n s : x s d= h t t p : //www. w3. org /1999/XMLSchema > <env:body> <ns1:dogooglesearch xmlns: ns1= urn: GoogleSearch e n v : e n c o d i n g S t y l e= h t t p : // schemas. xmlsoap. org / soap / e n c o d i n g / > <key x s i : t y p e= x s d : s t r i n g >00000000000000000000000000000000</ key> <q x s i : t y p e= x s d : s t r i n g >s h r d l u winograd m a c l i s p t e l e t y p e</q> <s t a r t x s i : t y p e= x s d : i n t >0</ s t a r t> <maxresults x s i : t y p e= x s d : i n t >10</ maxresults> < f i l t e r x s i : t y p e= x s d : b o o l e a n >t r u e</ f i l t e r> <r e s t r i c t x s i : t y p e= x s d : s t r i n g ></ r e s t r i c t> <s a f e S e a r c h x s i : t y p e= x s d : b o o l e a n >f a l s e</ s a f e S e a r c h> <l r x s i : t y p e= x s d : s t r i n g ></ l r> <i e x s i : t y p e= x s d : s t r i n g >l a t i n 1</ i e> <oe x s i : t y p e= x s d : s t r i n g >l a t i n 1</ oe> </ n s 1 :dogooglesearch> </ env:body> </SOAP ENV:Envelope>
11/21 WSDL WSDL (Web Services Description Language) : version 1.1 : mars 2001 (http://www.w3.org/tr/2001/note-wsdl-20010315) version 1.2 : en cours (Working Draft) dialecte XML permettant de décrire un service web
12/21 WSDL <? xml v e r s i o n= 1.0?> <d e f i n i t i o n s name= T e m p e r a t u r e C o n v e r s i o n s targetnamespace= h t t p : // w e b s e r v i c e s. d a e h o s t i n <t y p e s> <x s : s c h e m a e l e m e n t F o r m D e f a u l t= q u a l i f i e d targetnamespace= h t t p : // w e b s e r v i c e s. d a e h o s <xs: element name= CelciusToFahrenheit > <x s : c o m p l e x T y p e> <x s : s e q u e n c e> <xs: element name= ncelcius type= xs: decimal /> </ x s : s e q u e n c e> </ x s :complextype> </ x s : e l e m e n t> <xs: element name= CelciusToFahrenheitResponse > <x s : c o m p l e x T y p e> <x s : s e q u e n c e> <xs: element name= CelciusToFahrenheitResult type= xs: decimal /> </ x s : s e q u e n c e> </ x s :complextype> </ x s : e l e m e n t> <xs: element name= FahrenheitToCelcius > <x s : c o m p l e x T y p e> <x s : s e q u e n c e> <xs: element name= nfahrenheit type= xs: decimal /> </ x s : s e q u e n c e> </ x s :complextype> </ x s : e l e m e n t>
13/21 WSDL <xs: element name= FahrenheitToCelciusResponse > <x s : c o m p l e x T y p e> <x s : s e q u e n c e> <xs: element name= FahrenheitToCelciusResult type= xs: decimal /> </ x s : s e q u e n c e> </ x s :complextype> </ x s : e l e m e n t> <x s : e l e m e n t name= W i n d C h i l l I n C e l c i u s > <x s : c o m p l e x T y p e> <x s : s e q u e n c e> <xs: element name= ncelcius type= xs: decimal /> <xs: element name= nwindspeed type= xs: decimal /> </ x s : s e q u e n c e> </ x s :complextype> </ x s : e l e m e n t> <xs: element name= WindChillInCelciusResponse > <x s : c o m p l e x T y p e> <x s : s e q u e n c e> <x s : e l e m e n t name= W i n d C h i l l I n C e l c i u s R e s u l t type= x s : d e c i m a l /> </ x s : s e q u e n c e> </ x s :complextype> </ x s : e l e m e n t>
14/21 WSDL <xs: element name= WindChillInFahrenheit > <x s : c o m p l e x T y p e> <x s : s e q u e n c e> <xs: element name= nfahrenheit type= xs: decimal /> <xs: element name= nwindspeed type= xs: decimal /> </ x s : s e q u e n c e> </ x s :complextype> </ x s : e l e m e n t> <xs: element name= WindChillInFahrenheitResponse > <x s : c o m p l e x T y p e> <x s : s e q u e n c e> <xs: element name= WindChillInFahrenheitResult type= xs: decimal /> </ x s : s e q u e n c e> </ x s :complextype> </ x s : e l e m e n t> </ x s :schema> </ t y p e s> <message name= CelciusToFahrenheitSoapRequest > <part name= parameters element= tns: CelciusToFahrenheit /> </ message> <message name= CelciusToFahrenheitSoapResponse > <part name= parameters element= tns: CelciusToFahrenheitResponse /> </ message> <message name= FahrenheitToCelciusSoapRequest > <part name= parameters element= tns: FahrenheitToCelcius /> </ message>
15/21 WSDL <message name= FahrenheitToCelciusSoapResponse > <part name= parameters element= tns: FahrenheitToCelciusResponse /> </ message> <message name= WindChillInCelciusSoapRequest > <p a r t name= p a r a m e t e r s e l e m e n t= t n s : W i n d C h i l l I n C e l c i u s /> </ message> <message name= WindChillInCelciusSoapResponse > <part name= parameters element= tns: WindChillInCelciusResponse /> </ message> <message name= WindChillInFahrenheitSoapRequest > <p a r t name= p a r a m e t e r s e l e m e n t= t n s : W i n d C h i l l I n F a h r e n h e i t /> </ message> <message name= WindChillInFahrenheitSoapResponse > <part name= parameters element= tns: WindChillInFahrenheitResponse /> </ message> <porttype name= TemperatureConversionsSoapType > <operation name= CelciusToFahrenheit > <documentation> Converts a C e l c i u s Temperature to a Fahrenheit value </ documentation> <input message= tns: CelciusToFahrenheitSoapRequest /> <output message= tns: CelciusToFahrenheitSoapResponse /> </ o p e r a t i o n>
16/21 WSDL <operation name= FahrenheitToCelcius > <documentation> Converts a Fahrenheit Temperature to a C e l c i u s value </ documentation> <input message= tns: FahrenheitToCelciusSoapRequest /> <output message= tns: FahrenheitToCelciusSoapResponse /> </ o p e r a t i o n> <o p e r a t i o n name= W i n d C h i l l I n C e l c i u s > <documentation> Windchill temperature c a l c u l a t e d with the formula of Steadman </ documentation> <input message= tns: WindChillInCelciusSoapRequest /> <output message= tns: WindChillInCelciusSoapResponse /> </ o p e r a t i o n> <operation name= WindChillInFahrenheit > <documentation> Windchill temperature c a l c u l a t e d with the formula of Steadman </ documentation> <input message= tns: WindChillInFahrenheitSoapRequest /> <output message= tns: WindChillInFahrenheitSoapResponse /> </ o p e r a t i o n> </ porttype>
17/21 WSDL <binding name= TemperatureConversionsSoapBinding type= tns:temperatureconversionssoapt <s o a p : b i n d i n g s t y l e= document t r a n s p o r t= h t t p : // schemas. xmlsoap. org / soap / h t t p /> <operation name= CelciusToFahrenheit > <soap: operation soapaction= s t y l e= document /> <i n p u t> <s o a p : b o d y use= l i t e r a l /> </ i n p u t> <o u t p u t> <s o a p : b o d y use= l i t e r a l /> </ o u t p u t> </ o p e r a t i o n> <operation name= FahrenheitToCelcius > <soap: operation soapaction= s t y l e= document /> <i n p u t> <s o a p : b o d y use= l i t e r a l /> </ i n p u t> <o u t p u t> <s o a p : b o d y use= l i t e r a l /> </ o u t p u t> </ o p e r a t i o n>
18/21 WSDL <o p e r a t i o n name= W i n d C h i l l I n C e l c i u s > <soap: operation soapaction= s t y l e= document /> <i n p u t> <s o a p : b o d y use= l i t e r a l /> </ i n p u t> <o u t p u t> <s o a p : b o d y use= l i t e r a l /> </ o u t p u t> </ o p e r a t i o n> <operation name= WindChillInFahrenheit > <soap: operation soapaction= s t y l e= document /> <i n p u t> <s o a p : b o d y use= l i t e r a l /> </ i n p u t> <o u t p u t> <s o a p : b o d y use= l i t e r a l /> </ o u t p u t> </ o p e r a t i o n> </ b i n d i n g> <s e r v i c e name= T e m p e r a t u r e C o n v e r s i o n s > <documentation> Visual DataFlex Web S e r v i c e to convert temperature values between C e l c i u s and Fahr </ documentation> <port name= TemperatureConversionsSoap binding= tns: TemperatureConversionsSoapBindi <s o a p : a d d r e s s l o c a t i o n= h t t p : // w e b s e r v i c e s. d a e h o s t i n g. com/ s e r v i c e s / T e m p e r a t u r e C o n </ p o r t> </ s e r v i c e> </ d e f i n i t i o n s>
19/21 UDDI UDDI (Universal Data Description Interface) : version 3 : juillet 2002 (http://uddi.org/pubs/uddi-v3. 00-published-20020719.htm) Annuaire permettant d enregistrer et de rechercher des descriptions de services web
20/21 Définition : Mise en œuvre des formats (dialecte XML) des sémantiques associées (sens de chaque élément des documents XML) des protocoles (e.g., utilisation de HTTP pour transmettre des messages SOAP) des services web standards (comme les API de UDDI) redémarrage automatique du serveur persistance des données interfaçage avec les systèmes d information de l entreprise (SGBD, ERP, CRM, etc.) Utiliser un serveur d applications : serveur EJB (J2EE 1.4 va intégrer le support des services web) serveur.net
21/21 Implémentation d un service Web grandes lignes Java : standardisation par Sun des API et des outils associés : JAX-RPC (JA XML-based RPC) : utilisation de SOAP (mode RPC) JAXR (JA XML Registries) : utilisation de UDDI JAXM (JA XML Messaging) : utilisation de SOAP (mode message) SAAJ (SOAP with Attachments API for Java) : utilisation de SOAP (pièces jointes) outil de transformation d une description WSDL en interface Java et vice-versa etc..net : Stardisation Microsoft API dans la bibliothèque de classes de.net utilisation en C# ou VB