Cours 6 : Les Web Services et SOAP Mars 2011 - Version 1.0 - Les technologies XML Cours 6 : Les Web Services et SOAP Mars 2011 - Version 1.0 -
Web Services - SOAP SOAP (Simple Object Access Protocol) est un protocole RPC, orienté objet, bâti sur XML. Il permet l’invocation de méthode sur des objets distants grâce à l’échange de message XML. SOAP n'est plus un acronyme depuis la version 1.2 qui a été réécrite en termes d'infosets XML, et non plus sous forme de sérialisations de document XML. La notion d'objet (spécifiée dans Simple OBJECT Access Protocol) devient donc obsolète. Infosets XML : structure arborescente avec comme racine un nœud de type Document Information Item. On peut définir un infoset comme la représentation d’un document XML bien formé ainsi que l’ensemble des informations nécessaires à la manipulation des données de ce document.
InfoSet : http://www.w3.org/TR/xml-infoset. Web Services - SOAP Bien que le protocole de transport le plus commun soit http(s), il est possible de l’utiliser sur SMTP, voire tout MOM. W3C SOAP : http://www.w3.org/2002/07/soap-translation/soap12-part0.html InfoSet : http://www.w3.org/TR/xml-infoset.
Résolution des problèmes de sécurité : Web Services - SOAP Basé sur la technologie universelle XML par opposition aux spécifiques DCOM - DCE/NDR, CORBA - IIOP/CDR, JAVA - RMI/JRMP, RDA – XDR . Indépendant du langage, modèle objet (jusqu’à la version 1.1, système et plate-forme d’hébergement du service Web. Prend en charge les protocoles et formats suivants : HTTP, SMTP et MIME (supporte «Multipart MIME»). Résolution des problèmes de sécurité : Les firewalls supportent des ports spécifiques (HTTP, FTP) La plupart des middlewares assignent des ports dynamiques …
Web Services - SOAP Septembre 1999 : SOAP 0.9 Spécifications par MicroSoft et DevelopMentor Décembre 1999 : SOAP 1.0 Soumission des spécifications à l’ IETF Association de UserLand Mai 2000 : SOAP 1.1 Nombreuses associations : IBM, HP, Lotus, Compaq, Intel … XIDL : rapprochement de Corba Septembre 2000 Groupe de travail W3C pour la standardisation de SOAP Corba/Soap Interworking RFP => SCOAP Avril 2007 : SOAP 1.2 SOAP abandonne le modèle objet pour utiliser XML Infosets
Web Services – SOAP - Exemple Requête HTTP invoquant une méthode GetOrders : POST /Orders HTTP/1.1 Host: xxx.xxx.xxx.xxx Content-Type: text/xml; charset="utf-8" Content-Length: nnnn SOAPAction: "http://www.someorders.com/GetOrders" <?xml version=“1.0”?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <orders:GetOrders xmlns:orders="http://www.someorders.com/orders"> <CustomerID>ALFKI</CustomerID> <SalesRepID>85</SalesRepID> </orders:GetOrders> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Web Services – SOAP - Exemple Réponse HTTP à la requête précédente : HTTP/1.1 200 OK MessageType: CallResponse Content-Type: text/xml <?xml version=“1.0”?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <orders:GetOrdersResponse xmlns:orders="http://www.someorders.com/orders"> <…… données en retour sous forme XML …..> </orders:GetOrdersResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Eléments d’un message SOAP : Web Services – SOAP Eléments d’un message SOAP : Envelope Élément pouvant contenir des déclarations d'espaces de noms ou des sous-éléments Header (optionnel) Permet des extensions telles que authentification, session… Body (obligatoire) Définit la méthode appelée, contient les paramètres Peut contenir un élément Fault en cas d'erreur Protocol Headers SOAP Envelope SOAP Header SOAP Body
NameSpaces 1.1 NameSpaces 1.2 Web Services – SOAP NameSpaces 1.1 Le namespace des balises SOAP : http://schemas.xmlsoap.org/soap/envelope Le namespace de l’encodage SOAP http://schemas.xmlsoap.org/soap/encoding NameSpaces 1.2 Le namespace des balises SOAP : http://www.w3.org/2003/05/soap-envelope/ Le namespace de l’encodage SOAP http://www.w3.org/2003/05/soap-encoding
SOAP Header : Mécanisme d’extension du protocole SOAP Web Services – SOAP SOAP Header : Mécanisme d’extension du protocole SOAP La balise Header est optionnelle Si la balise Header est présente, elle doit être le premier fils de la balise Envelope La balise Header contient des entrées Une entrée est n’importe quelle balise incluse dans un namespace. Les entrées contenues dans la balise Header sont non applicatives.
Web Services – SOAP Exemple <SOAP-ENV:Header> <t:Transaction xmlns:t="some-URI" SOAP-ENV:mustUnderstand="0"> 5 </t:Transaction> </SOAP-ENV:Header> L’attribut mustUnderstand n Rien ou =0 : l’élément est optionnel pour l’application réceptrice n =1 : l’élément doit être compris de l’application réceptrice. Sinon le traitement du message par le récepteur doit échouer.
SOAP Body : Le Body contient le message à échanger Web Services – SOAP SOAP Body : Le Body contient le message à échanger La balise Body est obligatoire La balise Body doit être le premier fils de la balise Envelope (ou le deuxième si il existe une balise Header) La balise Body contient des entrées qui sont des données applicatives. Une entrée est n’importe quelle balise incluse optionnellement dans un namespace Une entrée peut être une Fault.
SOAP Fault : Balise permettant de signaler des cas d’erreur. Web Services – SOAP SOAP Fault : Balise permettant de signaler des cas d’erreur. SOAP 1.1 : La balise Fault contient les balises suivantes: Faultcode (Obligatoire): un code permettant d’identifier le type d’erreur. Faultstring (Obligatoire): une explication en langage naturel. Faultactor : une information identifiant l’initiateur de l’erreur. Detail : Définition précise de l’erreur.
Web Services – SOAP SOAP 1.2 : Code (obligatoire) : Peut être l'un des codes de spécifications prédéfinis ou un code personnalisé pour l'application. Reason (obligatoire) : Chaîne d'explication de l'erreur. SOAP 1.2 supporte des nombreuses raisons avec un support multi-langages. Role : Requis pour tous les nœuds SOAP, excepté pour l'ultime destinataire. Un URI décrivant la source de l'erreur. Detail : Requis si le corps de l'erreur SOAP ne peut pas être traité. Doit fournir des éléments sur le corps des éléments SOAP ayant échoué. Node : Requis pour tous les nœuds SOAP , excepté l'ultime destinataire. Un URI décrivant le nœud ayant entraîné l'erreur.
Web Services – SOAP Faultcode :4 groupes de code d’ erreur Client, Server, MustUnderstand, VersionMismatch Exemple SOAP 1.1 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <s:Fault> <faultcode xmlns="">s:Client</faultcode> <faultstring xml:lang="fr-FR" xmlns=""> Une opération invalide s'est produite.</faultstring> </s:Fault> </s:Body> </s:Envelope>
Web Services – SOAP Exemple SOAP 1.2 <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> <s:Header> <a:Action s:mustUnderstand="1"> http://www.w3.org/2005/08/addressing/soap/fault</a:Action> <a:RelatesTo>urn:uuid:64c5619c-99c3-4a83-9bdc- fcbb6f399f93</a:RelatesTo> </s:Header> <s:Body> <s:Fault> <s:Code> <s:Value>s:Sender</s:Value> </s:Code> <s:Reason> <s:Text xml:lang="fr-FR">Une opération invalide s'est produite.</s:Text> </s:Reason> </s:Fault> </s:Body> </s:Envelope>
Web Services – SOAP Les données contenues dans un message SOAP étant typées il faut définir un moyen de les encoder. L’encodage c’est la représentation de valeurs sous forme XML. Le décodage est le pendant de l’encodage soit la construction de valeurs à partir d’XML Le fragment XML représentant des valeurs a une structure qui dépend du type de ces valeurs Il faut donc définir ce type Soit par un mécanisme définit par l’utilisateur Soit en utilisant des Schéma XML (préconisé)
Simple value (string, integers,etc) Compound value (array, struct, …) Web Services – SOAP Définition Value (valeur d’une donnée) Simple value (string, integers,etc) Compound value (array, struct, …) Type (d’une value) Simple Type Compound Type
Web Services – SOAP Types simples Types définis dans XML Schéma, partie 2 Entier, flottant, entiers négatifs, chaînes caractères, … Énumérations Types complexes Tableaux Partie d’un tableau Tableau creux (sparse array) Structures À la C
<element name=“age” type=“int”> Web Services – SOAP Types xml simples <element name=“age” type=“int”> <element name=“taille” type=“float”> <age>23</age> <taille>1.87</taille> Enumeration <element name=“couleur”> <simpleType base=“xsd:string”> <enumeration value=“Rouge”> <enumeration value=“Bleu”> </simpleType> <couleur>Bleu</couleur>
Web Services – SOAP <element name=“Personne”> <complexType> <element name=“Nom” type=“xsd:string”> <element name=“Prenom” type=“xsd:string”> <element name=“Age” type=“xsd:float”> </complexType> <Personne> <Nom>Durand</Nom> <Prenom>Michel</Prenom> <Age>34.7</Age> </Personne>
Web Services – SOAP Tableau <element name=“TabPersonne”> <complexType base=“SOAP-ENC:Array”> <element name=“Personne” type=“xyz:Personne” maxOccurs=“unbounded”> </complexType> </element> <xyz:TabPersonne SOAP-ENC:arrayType=“xyz:Personne[2]”> <Personne> <Nom>Durand</Nom> <Prenom>Michel</Prenom> <Age>34.7</Age> </Personne> <Nom>Dupond</Nom> <Prenom>Serge</Prenom> <Age>40</Age> </xyz:TabPersonne>
Tableaux Multidimentionnels Web Services – SOAP Tableaux Multidimentionnels <SOAP-ENC:Array SOAP-ENC:arrayType= =“xsd:string[2,2]”> <item>l1c1</item> <item>l1c2</item> <item>l2c1</item> <item>l2c2</item> < SOAP-ENC:Array> Tableaux Creux <SOAP-ENC:Array id="array-1" SOAP-ENC:arrayType="xsd:string[10,10]"> <item SOAP-ENC:position="[2,2]">Third row, third col</item> <item SOAP-ENC:position="[7,2]">Eighth row, third col</item> </SOAP-ENC:Array>