53
1 2009-2010 Services Web Samir Tata Département INFormatique TELECOM SudParis http://www-inf.it-sudparis.eu/cours/WebServices

Services Web 2009

Embed Size (px)

Citation preview

12009-2010

Services Web

Samir TataDépartement INFormatique

TELECOM SudParishttp://www-inf.it-sudparis.eu/cours/WebServices

22009-2010

Introduction

Source: Fabien HACQUEBART

32009-2010

Références• Web

– http://www-inf.it-sudparis.eu/cours/WebServices/– Site de W3C (normes) : www.w3.org– Site de Zvon (tutoriel XML) : http://www.zvon.org/

• Livres– Georges Gardarin : Des bases de données aux services Web, Dunod,

Paris, 2002

– Hubert Kadima et Valérie Monfort : Les services Web: techniques, démarches et outils, Dunod, Paris, 2003

– Gustavo Alonso, Fabio Casati, Harumi Kuno, and Vijay Machiraju : Web Services: Concepts, Architecture and Applications, Springer-Verlag, New York, 2004

– Jorge Cardoso and Amit P. Sheth : Semantic Web Services, Processesand Applications (Semantic Web and Beyond: Computing for HumanExperience), Springer-Verlag, New York, 2006

Plan

42009-2010

• Genèse de l’« orientation » service• Services Web• Panorama de technologies• Orchestration de services Web

Plan

52009-2010

• Genèse de l’« orientation » service– Genèse– Définition– Architecture

• Services Web• Panorama de technologies• Orchestration de services Web

62009-2010

« Orientation » service

Genèse, Définition et Architecture

72009-2010

Genèse (1/3)

• Paradigme procédure– procédures, fonctions et données structurées– applications monolithiques, applications serveurs isolées

• Paradigme objet– classes (fonctions et données structurées)– lié à un langage de programmation– applications monolithiques, applications c/s isolées

• Paradigme composant– composant (groupe d’interfaces)– lié à un modèle de composant – entité de plus gros grain, – décrit par ce qu’il offre et ce qu’il requiert, – supporte des propriétés non fonctionnelles de manière déclarative,– utilisation indépendante de l’implémentation (pour certains

modèle/plateforme de composants)– interaction application-application

82009-2010

Genèse (2/3)

• POS, POO, POC : pourquoi on veut améliorer ?– Paradigmes ?

• on parle du code et non de l’architecture • l’architecture suit le modèle de programmation

– et alors ?• Concepts abstraits et mapping concrets

– mapping vers Java, C++, CORBA, COM …– Réutilisation entre domaines différents difficile sinon

impossible

• Besoins ?– Support de l’hétérogénéité : plusieurs plate-formes

logicielles et matérielles– Accès et manipulation des données de partout

92009-2010

Genèse (3/3)

**

objets

*

servicesservicesservicescomposants

Niveaux d’abstraction grandissant

Langagesprocéduraux

CORBA

CCMEJB.NET

Machinesvirtuelles

Ass

embl

eur

Lang

ages

mac

hine

01011101001100001011

102009-2010

Définition (1/2)

• C’est quoi alors un service– un block avec des propriétés fonctionnelles et non

fonctionnelles• Localisations, plate-forme et code sont peu importants

• implications sur – le service qui peut être

• destinataire d’un message (application)• manipulateur d’un message (infrastructure)• transporteur d’un message (protocole)

– l'utilisation d’un service qui• est toujours supposée distante• passe toujours au dessus des plate-formes• ignore l’implémentation

112009-2010

Définition (2/2)Un Service expose un Contrat

Les services communiquent par messages

Conditions Générales de VenteRèglement Intérieur

Vos droits/Vos devoirsin

out

Un Service est Autonome(et sans état)

Les Frontières entre services sont Explicites

Source A. Occello

122009-2010

Architecture (1/2)

ServiceRegistry

ServiceRequestor

ServiceProvider

Find Publish

Bind

ServiceDescription

ServiceDescription

Service

132009-2010

Architecture (2/2)

• Les partenaires– Le fournisseur de services crée le service Web, puis publie

son interface ainsi que les informations d'accès au service, dans un annuaire de services Web.

– L'annuaire de services rend disponible l'interface du service ainsi que ses informations d'accès, pour les demandeur potentiel de service.

– Le demandeur de services accède à l'annuaire de service pour effectuer une recherche afin de trouver les services désirés. Ensuite, il se lie au fournisseur pour invoquer le service.

Plan

142009-2010

• Genèse de l’« orientation » service• Services Web

– Origines et définition– WSDL : Web Service description Language– SOAP : Simple Object Access Protocol– Développement de SW avec Axis

• Panorama de technologies• Orchestration de services Web

152009-2010

Services Web

Origines et Définitions

162009-2010

Service Web : les origines• Le Web d’aujourd’hui

– conçu pour une interaction client-application– développé autour de 2 standards http et html– permet de supporter le B2C

• Le Web de demain ?– Le Web est partout. Que peut-on faire avec ?

• Supporter des places de marché électronique (E-marketpalces)

• intégrer des procédés métiers• partager des ressources

– Les approches existantes sont ad hoc • e.g. interactions application-application avec des

formulaires html– But: permettre une interaction application-application

172009-2010

Trois générations d’applications Web

• 1ère génération– Ressources statiques (rôle de serveur)– Documents– e.g. pages Web statiques (HTML)

• 2ème génération– Ressources dynamiques (rôle de serveur)– Applications– e.g. pages Web dynamiques, ASP, JSP, PHP, ...

• 3ème génération– Services (rôles de serveur & client)

182009-2010

Service Web : définition

A Web service is a software application identified by a URI, whose interfaces and binding(1) are capable of being defined, described and discovered by XML artefacts and supports direct interactions with other software applications using XML based messages via Internet-based protocols. (W3C definition)

(1) An association between an Interface, a concrete protocol and a data format

Un service Web est une application logicielle 1. identifiée par un URI dont les interfaces et les

liaisons sont définies, décrites et découvertes avec des mécanismes XML, et

2. supporte une interaction directe avec les autres applications logicielles en utilisant des messages XML via un protocole Internet.

192009-2010

Service Web : caractéristique

• Les services Web sont – des service

• autonome• exposant des contrats• dont les frontières sont explicites• qui communiquent par messages

– accessible sur le Web• Les messages sont véhiculés par des protocoles Web

202009-2010

Architecture Web service

212009-2010

Architecture Web service

• Les partenaires– Le fournisseur de services crée le service Web, puis publie

son interface ainsi que les informations d'accès au service, dans un annuaire de services Web.

– L'annuaire de services rend disponible l'interface du service ainsi que ses informations d'accès, pour les demandeur potentiel de service.

– Le demandeur de services accède à l'annuaire de service pour effectuer une recherche afin de trouver les services désirés. Ensuite, il se lie au fournisseur pour invoquer le service.

• Les standards– Protocole SOAP : Achemine les messages entre fournisseur,

annuaire et demandeur de services – Langage WSDL : Décrit les interface des services– Norme UDDI : spécifie la structure des annuaires de services

222009-2010

Services Web

WSDL : Web Service description Language

Rôle du langage WSDL

232009-2010

• WSDL est un langage qui permet de décrire :– l’interface d’un service Web (types de données, opérations,

entrées, sorties)– comment invoquer un service Web

• Objectif :– Décrire les services comme un ensemble d’opérations et de

messages abstraits reliés à des protocoles et des serveurs réseaux

• Permet de décharger les utilisateurs des détails techniques de réalisation d’un appel

• WSDL est un langage qui standardise les schémas XML utilisés pour établir une connexion entre émetteurs et récepteurs.

242009-2010

Web service description using WSDL

Source : Hubert Kadima & Valérie Monfort

252009-2010

Structure d’un document WSDL

<definitions><types>définition des types</types><message>définition des messages</message><portType>définition des interfaces </portType><binding>définition des bindings</binding><services>définition de endpoint </service>

</definitions>

262009-2010

Exemple : un annuaire

• Opérations– Ajouter une entrée

• Entrée :– Nom : Tata– Prénom : Samir– Adresse : 9 rue Charles Fourier 91011 Evry France

– Chercher une adresse• Entrée : nom• Sortie : Entrée ou message d’érreur

272009-2010

WSDL : <types> <wsdl:types>

<schema targetNamespace="urn:AnnuaireTypes"><import namespace="http://schemas.xmlsoap.org/soap/encoding/"/><complexType name="AdresseType">

<sequence><element name="code" nillable="true" type="soapenc:string"/><element name="numero" type="xsd:int"/><element name="pays" nillable="true" type="soapenc:string"/><element name="rue" nillable="true" type="soapenc:string"/><element name="ville" nillable="true" type="soapenc:string"/>

</sequence></complexType><complexType name="EntreeType">

<sequence><element name="adresse" nillable="true" type="tns1:AdresseType"/><element name="nom" nillable="true" type="soapenc:string"/><element name="prenom" nillable="true" type="soapenc:string"/><element name="telephone" type="xsd:int"/>

</sequence></complexType><complexType name="EntreeInexistanteType">

<sequence><element name="messageErreur" nillable="true" type="soapenc:string"/>

</sequence></complexType>

</schema></wsdl:types>

282009-2010

WSDL : <message> — décrit les noms et types d’un ensemble de champs à transmettre— peut-être comparé aux paramètres d'un appel de procédure

<wsdl:message name="chercherEntreeRequest"><wsdl:part name="nom" type="soapenc:string"/>

</wsdl:message>

<wsdl:message name="ajouterEntreeRequest"><wsdl:part name="entree" type="tns1:EntreeType"/>

</wsdl:message>

<wsdl:message name="EntreeInexistante"><wsdl:part name="fault" type="tns1:EntreeInexistanteType"/>

</wsdl:message>

<wsdl:message name="chercherEntreeResponse"><wsdl:part name="chercherEntreeReturn" type="tns1:EntreeType"/>

</wsdl:message>

<wsdl:message name="ajouterEntreeResponse"><wsdl:part name="ajouterEntreeReturn" type="soapenc:string"/>

</wsdl:message>

292009-2010

WSDL : <portType><wsdl:portType name="Annuaire"><wsdl:operation name="chercherEntree" parameterOrder="nom">

<wsdl:inputmessage="impl:chercherEntreeRequest" name="chercherEntreeRequest"/>

<wsdl:outputmessage="impl:chercherEntreeResponse" name="chercherEntreeResponse"/>

<wsdl:faultmessage="impl:EntreeInexistante" name="EntreeInexistante"/>

</wsdl:operation><wsdl:operation name="ajouterEntree" parameterOrder="entree">

<wsdl:inputmessage="impl:ajouterEntreeRequest" name="ajouterEntreeRequest"/>

<wsdl:outputmessage="impl:ajouterEntreeResponse" name="ajouterEntreeResponse"/>

</wsdl:operation></wsdl:portType>

302009-2010

WSDL : <porttype>

• Les types de port (port Type) décrivent un ensemble d’opérations et euvent être comparés à une interface Java– One-way

• le service reçoit un message en entrée (<input>). – Request-response

• le service reçoit un message en entrée (<input>) et renvoie un message en sortie <output> ou un ou plusieurs messages d’erreur (<fault>)

– Solicit-response• Le service envoie un message (<output>) et reçoit un message

corrélé (<input>) ou un ou plusieurs messages d’erreur (<fault>).

– Notification• le service envoie un message de notification (<output>)

312009-2010

WSDL : <binding>

• Les Liaisons (binding) définissent le format des messages et le protocole utilisépar chaque type de port

<wsdl:binding name="AnnuaireServiceSoapBinding" type="impl:Annuaire"><wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="chercherEntree"><wsdl:input name="chercherEntreeRequest">

<wsdlsoap:bodyencodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

</wsdl:input><wsdl:output name="chercherEntreeResponse">

<wsdlsoap:bodyencodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

</wsdl:output><wsdl:fault name="EntreeInexistante">

<wsdlsoap:faultencodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="EntreeInexistante"/>

</wsdl:fault></wsdl:operation><wsdl:operation name="ajouterEntree">…</wsdl:operation>

</wsdl:binding>

322009-2010

WSDL : <service>• Le port est un point de terminaison identifié de manière unique par la

combinaison d'une adresse Internet et d'une liaison• Un Service est une collection de points d’entrée (endpoint) relatifs.

<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions targetNamespace="http://localhost:8080/axis/services/AnnuaireService"

xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/services/AnnuaireService" xmlns:intf="http://localhost:8080/axis/services/AnnuaireService" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="urn:AnnuaireTypes“xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">…

<!-- service decln --><wsdl:service name="AnnuaireService">

<wsdl:port binding="impl:AnnuaireServiceSoapBinding" name="AnnuaireService"><wsdlsoap:address location="http://localhost:8080/axis/services/AnnuaireService"/>

</wsdl:port></wsdl:service>

</definitions>

332009-2010

Exercice

• Écrire la description WSDL d’un service qui calcule la somme de deux entiers naturels

342009-2010

Services Web

SOAP: Simple Object Access Protocol

352009-2010

SOAP

• Simple Object Access Protocol • Intégration de XML au-dessus de HTTP :

– Pour accéder services, objets et serveurs– Indépendant de toute plate-forme

• Codage universel XML par opposition aux spécifiques :– DCOM - DCE/NDR– CORBA - IIOP/CDR– JAVA - RMI/JRMP– RDA - XDR

• 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

…• Associé à WSDL pour publication d'interfaces

Source G. Gardarin

362009-2010

Un échange type

Port de connexion (URL)

Application Cliente

Parser XML

Procuration

d'interface

Translateur

SOAP

Parser XML

RPC

local

Pare-feu Pare-feuMessages

SOAP Appel

HTTP

Réponse

Serveurd'application

Source G. Gardarin

372009-2010

Eléments d'un message

• Envelope– Élément pouvant contenir des déclarations d'espaces de

noms ou des sous-éléments

• Header– Élément optionnel fils de Envelope– Permet des extensions telles que authentification,

session, etc.

• Body – Élément obligatoire fils de Envelope– Définit la méthode appelée, contient les paramètres– Peut contenir un élément Fault en cas d'erreur

Source G. Gardarin

XML-RPC et SOAP

382009-2010

Structure d’un message SOAP

SOAP Message

SOAP EnvelopeSOAP Header

SOAP Body

Method Call & Data

Headers

HTTP Headers

Appel de mAppel de mééthode et descriptionthode et descriptionen XML de donnen XML de donnééeses

Corps qui contient lesCorps qui contient lesappels de mappels de mééthodes SOAPthodes SOAP

Entête individuelleEntête individuelleEntêteEntêteEnveloppeEnveloppe

Entête standard HTTPEntête standard HTTPet entête SOAP HTTPet entête SOAP HTTP

Le message SOAP CompletLe message SOAP Complet

392009-2010

SOAP : Message

<soap:Envelope<soap:Header>

... entête... </soap:Header><soap:Body>

... Corps du message... <soap:Fault>

... Erreurs éventuelles ...</soap:Fault>

</soap:Body></soap:Envelope>

402009-2010

L’enveloppe et l’entête• L’enveloppe définit le document XML comme étant un

message SOAP<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

</soap:Envelope>• L ’entête contient des éléments définis par l’utilisateur

<soap:Header> <m:local xmlns:m="http://www.Computer.com/local/">

<m:language>fr</m:language> <m:currency>Euro</m:currency>

</m:local> </soap:Header>

412009-2010

Le corps : Appel

• Le corps– Doit être présent dans le message SOAP– Contient le message

<soap:Envelope><soap:Body>

<sommeDemande xmlns:m="urn:MonPremierService"> <param1>25</param1> <param2>-25</param2>

</sommeDemande> </soap:Body>

</soap:Envelope>

422009-2010

Le corps: réponse

<soap:Envelope><soap:Body>

<sommeReponse xmlns:m=“urn:MonPremierService”> <return>0</return>

</sommeReponse> </soap:Body>

</soap:Envelope>

432009-2010

Le corps : réponse

• Erreurs qui apparaissent pendant l’exécution du message

<soap:Envelope><soap:Body>

<soap:Fault> <faultstring>

On ne peut sommer des entiers négatifs</faultstring>

</soap:Fault> </soap:Body>

</soap:Envelope>

442009-2010

Exercice

• Écrire un exemple d’un message SOAP envoyé à ou par le service Web « annuaire »

452009-2010

Services Web

Développement de SW avec Axis

462009-2010

Introduction

• Implantation de SOAP1.1– Java– OpenSource

• Communauté Apache– Apache, Tomcat, Xerces, Struts, Cocoon

• Support coté serveur – Servlet qui reçoit et envoie des messages SOAP HTTP

(pont SMTP)• Support coté client

– API pour envoyer des messages SOAP sur HTTP et SMTP

472009-2010

Moteur de Servlets (Notion)

• Une Servlet (HTTP) – objet Java qui fonctionne en mode requête/réponse (HTTP)

• Un moteur (container) de Servlet

– application qui reçoit des requêtes http et qui les transmet aux Servlets

– Exemples• Tomcat (couplage avec Apache), • Websphere (couplage avec IBM http Server), • Weblogic …

482009-2010

Architecture (Serveur)

• Le client envoie des messages SOAP/HTTP• La Servlet AxisServlet reçoit et renvoie les messages SOAP et transmet

aux objets Java correspondant• Les Objets Java effectuent les services. Ils sont des objets Java

classiques.

JVM

Moteur de Servlet(Tomacat)

AxisServletSOAP/HTTP

492009-2010

Tomcat File System

anotherapp

TOMCAT

webapps

index.htmlWEB-INF

web.xml classes lib

examples

jsp

*.jar*.class

Exp.jsp

WEB-INF

web.xml classes lib

axis

Somme.jws

*.class *.jar

502009-2010

Développement d’un Web Service JWS (axis1)

• Développer une classe Javapublic class Somme {

public int sommer(int i1, int i2) {return i1+i2;

}}

• Sauvegarder la classe dans Somme.jws • Copier Somme.java dans le répertoire axis • Lancer le serveur tomcat• Obtention de la description WSDL

http://postex:8080/axis/Somme.jws?WSDL

512009-2010

Développement d’un client à partir du WSDL (axis1)

• Génération d’un ensemble de classes facilitant l’envoi de messages SOAP:– java org.apache.axis.wsdl.WSDL2Java file.wsdl

• Classes générées:– Type, PortType, Binding et Service

• Construction du client :– Instancier un Service– Obtenir un Port à partir du Service– Utiliser les méthodes du Port

• Construire les paramètres en fonction des Types

522009-2010

Le client (axis1)

public class Client {public static void main(String[] args) {

try {// Instancier un ServiceSommeService service=new SommeServiceLocator();

// Obtenir un Port à partir du ServiceSomme port=service.getSomme();

// Utiliser les méthodes du Portint result = port.sommer(2,3);System.out.println("La somme est : "+result);

} catch (Exception ex) {ex.printStackTrace();

}}}

532009-2010

Axis2 avec ADB

• Génération d’un ensemble de classes facilitant l’envoi de messages SOAP:– $AXIS2_HOME/bin/wsdl2java.sh –uri file.wsdl -d adb -s

• Classes générées:– Sub

• Construction du client :– Instancier le stub– Instancient et initialiser la requête (sous classe du stub)– Utiliser les méthodes du stub

• Construire les paramètres en fonction des Types