Les Web Services. Stéphane Bortzmeyer <bortzmeyer@nic.fr> Novembre 2003



Documents pareils
Architectures Web Services RESTful

4. SERVICES WEB REST 46

Intégration d'applications à "gros grain" Unité d'intégration : le "service" (interface + contrat)

Introduction aux «Services Web»

Architecture Orientée Service, JSON et API REST

COMPRENDRE L ARCHITECTURE DES WEB SERVICES REST. Amosse EDOUARD, Doctorant

Sécurité des Web Services (SOAP vs REST)

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

L3 informatique TP n o 2 : Les applications réseau

OpenPaaS Le réseau social d'entreprise

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Programmation Web Avancée Introduction aux services Web

Manuel d intégration API SOAP SMS ALLMYSMS.COM

Application Web et J2EE

Le cadre des Web Services Partie 1 : Introduction

Introduction...3. Objectif...3. Manipulations...3. Gestion des utilisateurs et des groupes...4. Introduction...4. Les fichiers de base...

Technologies pour Web Services faciles : REST, JSON

SOAP Concepts Application à Glassfish

Les Services Web. Jean-Pierre BORG EFORT

Tests de montée en charge avec Tsung

Instructions Mozilla Thunderbird Page 1

Paris Airports - Web API Airports Path finding

Plateforme PAYZEN. Définition de Web-services

INF8007 Langages de script

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License,

Les Architectures Orientées Services (SOA)

Avant-propos. VERSION Compilation du document à l aide de PDFLATEX Philippe Charlier. 1 Version actuelle : SPIP http ://

Gestion centralisée d un réseau de sites discrets. Nicolas JEAN

Programmation Web. Madalina Croitoru IUT Montpellier

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

MELTING POTES, LA SECTION INTERNATIONALE DU BELLASSO (Association étudiante de lʼensaparis-belleville) PRESENTE :

Bien architecturer une application REST

Protocoles Applicatifs

Module http MMS AllMySMS.com Manuel d intégration

Systèmes d'informations historique et mutations

Le Web de Données Dan VODISLAV Université de Cergy-Pontoise Master Informatique M2 Plan

Guide pratique de CSPM, l'outil de suivi des performances du système Version française du Complete System Performance Monitor HOWTO

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

VTP. LAN Switching and Wireless Chapitre 4

SUGARCRM Sugar Open Source Guide d Installation de French SugarCRM Open Source Version 4.2

ADMINISTRATION DE ADOBE LIVECYCLE MOSAIC 9.5

Remote Method Invocation (RMI)

Introduction aux. services web 2 / 2

How to Login to Career Page

Cloud et SOA La présence du Cloud révolutionne-t-elle l approche SOA?

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Configurer la supervision pour une base MS SQL Server Viadéis Services

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Introduction...3. Objectif...3. Manipulations...3. La Sauvegarde...4. Les différents types...4. Planification...4. Les outils...5

(structure des entêtes)

On Feature Interaction among Web Services Michael Weiss et Babak Esfandiari

Remote Method Invocation Les classes implémentant Serializable

Systèmes répartis. Fabrice Rossi Université Paris-IX Dauphine. Systèmes répartis p.1/49

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Alfstore workflow framework Spécification technique

Petite définition : Présentation :

Business Process Execution Language

Déploiement OOo en environnement Windows Terminal Server

La base de données XML exist. A. Belaïd

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Quick Start Guide This guide is intended to get you started with Rational ClearCase or Rational ClearCase MultiSite.

Autour du web. Une introduction technique Première partie : HTML. Georges-André SILBER Centre de recherche en informatique MINES ParisTech

Glossaire. ( themanualpage.org) soumises à la licence GNU FDL.

Lier Erlang avec d autres langages de programmation

Manuel d implémentation des Web Services Sous Axis1 et Axis2/Tomcat/linux. Par Pr Bouabid EL OUAHIDI

Ocs Inventory et GLPI s appuie sur un serveur LAMP. Je vais donc commencer par installer les paquets nécessaires.

Frequently Asked Questions

XML, PMML, SOAP. Rapport. EPITA SCIA Promo janvier Julien Lemoine Alexandre Thibault Nicolas Wiest-Million

Sécurité des applications web. Daniel Boteanu

Comment Accéder à des Bases de Données MySQL avec Windows lorqu'elles sont sur un Serveur Linux

SIP. Plan. Introduction Architecture SIP Messages SIP Exemples d établissement de session Enregistrement

RFC 7230 : Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing

Applications et Services WEB: Architecture REST

Il est recommandé de fermer les serveurs DNS récursifs ouverts

Urbanisation des SI Conduite du changement IT 20/03/09. Patrick CHAMBET

Hébergement de sites Web

Internet Group Management Protocol (IGMP) Multicast Listener Discovery ( MLD ) RFC 2710 (MLD version 1) RFC 3810 (MLD version 2)

Prototype de canal caché dans le DNS

Règles et paramètres d'exploitation de Caparmor 2 au 11/12/2009. Pôle de Calcul Intensif pour la mer, 11 Decembre 2009

Architectures d'intégration de données

Méthodes et Langages du Commerce Electronique

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Module BD et sites WEB

Hébergement de site web Damien Nouvel

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Installation d'un serveur RADIUS

Développement des Systèmes d Information

Introduction à HTTP. Chapitre HTTP 0.9

DOCUMENTATION - FRANCAIS... 2

Manuel d'exploitation de l'application Vitamin version 1.0

Calcul Parallèle. Cours 5 - JAVA RMI

Serveur DNS et DHCP couplé à LDAP Debian GNU/Linux

Développement d'un logiciel VoIP BlackBerry

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

MailStore Server 7 Caractéristiques techniques

Installation de DocBook sur un système Linux

Nouvelle version de Zonecheck, la 3.0, avec tests DNSSEC

PRIMAVERA P6 ENTERPRISE PROJECT PORTFOLIO MANAGEMENT WEB SERVICES

Transcription:

Les Web Services Slide 0 Stéphane Bortzmeyer <bortzmeyer@nic.fr> Novembre 2003 Slide 0 Ce document est distribué sous les termes de la GNU Free Documentation License http://www.gnu.org/licenses/licenses.html#fdl. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

Slide 1 Pourquoi utiliser le réseau C est l autre machine qui a les données C est l autre machine qui va vite C est l autre machine qui a les bons logiciels Slide 2 Avant les Web Services, les bricolages On copiait les données et les logiciels (cohérence), On analysait les pages Web (Welcome to Hell), On formatait en texte puis on re-analysait (whois...).

Slide 3 Programmation réseau sérieuse On faisait tout à la main (définir un protocole, peut-être avec BEEP, écrire les clients et les serveurs) On avait des solutions spécifiques à un langage (RMI) Corba http://www.corba.org/ ONC-RPC Slide 4 Les Web Services arrivent http://www.w3.org/2002/ws/ Ils s appuient sur le succès du Web : Disponibilité de HTTP, Web, donc bon, Et on passe les coupe-feux! Voir quand même RFC 3205.

Slide 5 Les Web Services spécifient : Un encodage (toujours XML), Un transport (souvent HTTP), Une organisation des requêtes et réponses (RPC, par exemple). Slide 6 XML-RPC, le plus simple http://www.xml-rpc.com Principe : la bibliothèque client encode les paramètres en XML et la bibliothèque serveur les décode. Le programmeur ne voit jamais de XML. On ne fait que des appels de procédure. Transport en HTTP seulement. Bibliothèques pour tous : Perl, C, Python, Ruby, Java, VisualBasic/.NET, PHP et même Emacs-Lisp.

Slide 7 XML-RPC, exemple Java // server has been created above Vector params = new Vector(); params.addelement(new Integer(5)); params.addelement(new Integer(3)); // Call the server, and get our result. Hashtable result = (Hashtable) server.execute("sample.sumanddifference", params); // We cannot use the procedure name directly (a limit of Java) int sum = ((Integer) result.get("sum")).intvalue(); int difference = ((Integer) result.get("difference")).intvalue(); Slide 8 XML-RPC, exemple Python server = xmlrpclib.server ( http://whois.eureg.org:8080/rpc2 ) # Call the server, and get our result. result = server.sample.sumanddifference(3, 5); sum = result["sum"] difference = result["difference"]

Slide 9 Exemples : Meerkat Un service d informations en ligne http://www.oreillynet.com/ pub/a/rss/2000/11/14/meerkat_xmlrpc.html, accessible en XML-RPC. <?php $server_url = /meerkat/xml-rpc/server.php ; $msg = new xmlrpcmsg( meerkat.getcategories, array()); $client = new xmlrpc_client($server_url, "www.oreillynet.com", 80); # Send our XML-RPC message to the server and receive a response in return $response = $client->send($msg); $value = $response->value(); # And convert it to a PHP data structure $categories = xmlrpc_decode($value); # Iterate over the results, printing each category s title Slide 10 while( list($k, $v) = each( $categories ) ) { print $v[ title ]. "<br />\n"; }?>

Slide 11 Exemples : Adam s Names Une interface d accès au registre : http://www.adamsnames.tc/api/xmlrpc.html Permet par exemple un whois moderne : my $rpc = Frontier::Client->new( url => http://www.adamsnames.tc/api/xmlrpc ); my $status = $rpc->call( domquery, xmlrpcdemo.tc ); my $dumper = Data::Dumper->new([ $status ])->Terse(1)->Indent(1); my $txt = $dumper->dump; XML-RPC, détails Types de paramètres : Slide 12 entiers, dates, booléens, chaines structs (tableaux associatifs) tableaux Les erreurs sont signalées par des exceptions.

Slide 13 XML-RPC, le serveur Avec le registry de XML-RPC (pour l introspection). self.registry.add_method( registry.querydomain, self.domquery, [[STRUCT, STRING, STRUCT]])... def domquery (self, domain, credentials): """Queries the registry for a domain s attributes""" if credentials.has_key( name ): raise Unauthorized self.cursor.execute(""" SELECT name,... def call (self, methodname, params): """Use our registry to find and call the appropriate method.""" try: return self.registry.dispatch_call(methodname, params) except Unauthorized: Slide 14 raise xmlrpclib.fault(403, Unauthorized )

domquery est une procédure normale, sans aucune connaissance de XML-RPC (par exemple, elle lève des exceptions normales). call connait le protocole et lève donc des exceptions spécifiques. XML-RPC, sur le câble Uniquement si vous voulez écrire une bibliothèque Slide 15 POST /RPC2 HTTP/1.0 User-Agent: Frontier/5.1.2 (NetBSD) Host: betty.userland.com Content-Type: text/xml Content-length: 181 <?xml version="1.0"?> <methodcall> <methodname>examples.getstatename</methodname> <params> <param> <value><i4>41</i4></value> </param> </params> </methodcall>

Slide 16 XML-RPC, lectures Un O Reilly très bien Le HOWTO http: //xmlrpc-c.sourceforge.net/xmlrpc-howto/xmlrpc-howto.html Slide 17 XML-RPC, limites Unicode? (uniquement ASCII, en standard) Introspection? http://xmlrpc-c.sourceforge.net/ xmlrpc-howto/xmlrpc-howto-api-introspection.html

REST, le Web original Representational State Transfer. Pas un protocole ou un format, c est une architecture, c est même l architecture originale du Web. Slide 18 L URI est important : connaitre l URI doit suffire pour accéder à la ressource HTTP fournit toutes les opérations nécessaires (GET, PUT et DELETE, essentiellement). Chaque opération est auto-suffisante : il n y a pas d état. En outre, et c est un point où le sens moderne de REST dévie de l architecture originale du Web, les requêtes et surtout les réponses sont aujourd hui typiquement encodées en XML Slide 19 Exemple REST en biologie XEMBL http://www.xml.com/pub/a/ws/2002/05/14/biows.html interface REST à EMBL. import urllib import sys from xml.dom.ext.reader import Sax2 from xml import xpath def extract(element, dom): match = xpath.evaluate("/insdset/insdseq/%s/text()" % element, dom) return match[0].nodevalue def format(element, dom): return "%s: %s" % (element, extract(element,dom)) id = sys.argv[1] url = http://www.ebi.ac.uk/cgi-bin/dbfetch?db=embl&id=%s&format=insdxml result = urllib.urlopen(url % id)

Slide 20 reader = Sax2.Reader() doc = reader.fromstream(result) print format("insdseq_locus", doc) print format("insdseq_moltype", doc) print format("insdseq_definition", doc) Slide 21 SOAP, le plus vendu http://www.soapware.org/ http://www.w3.org/tr/soap/ Simple Object Access Protocol Le meilleur marketing (W3C et Microsoft)

Slide 22 SOAP, les principes Très proche de XML-RPC. La bibliothèque client encode les paramètres en XML et la bibliothèque serveur les décode. Le programmeur ne voit jamais de XML. On fait des appels de procédure ou de l asynchrone. Transport en HTTP, BEEP, etc. Bibliothèques pour tous : Perl, C, C#, Python, Ruby, Java, VisualBasic/.NET, PHP, Ada. Slide 23 SOAP, un exemple Perl SOAP::Lite http://www.soaplite.com/ # Utilise l AUTOLOAD de Perl use SOAP::Lite +autodispatch => uri => http://www.soaplite.com/temperatures, proxy => http://services.soaplite.com/temper.cgi ; print f2c(100), "\n"; # Appelle une procédure distante

Slide 24 SOAP, un exemple Python SOAPpy http://pywebsvcs.sourceforge.net/ server = SOAP.SOAPProxy( http://api.google.com/search/beta2, namespace= urn:googlesearch ) result = server.dogooglesearch( Zls0Q7uAt2Lrcd7BHjai...zWJj7, python wsdl,...); print result[ estimatedtotalresultscount ] La chaine incompréhensible est la clé de la licence Google.

Types de paramètres : SOAP, détails Slide 25 entiers, dates, booléens, chaines, etc (tout ce qu on peut écrire avec les schémas) structs (tableaux associatifs) tableaux Les erreurs sont signalées par des exceptions (faults). Slide 26 SOAP, le serveur use SOAP::Transport::HTTP; my $daemon = SOAP::Transport::HTTP::Daemon -> new (LocalAddr => localhost, LocalPort => 8080) -> dispatch_to( Handler ); $daemon->handle; package Handler; sub hi { return "hello, world"; } sub bye { return "goodbye, cruel world"; }

Slide 27 Serveur SOAP plus détaillé On veut créer un service indiquant la disponibilité d un nom de domaine. % whois -h whois.sidn.nl is bortzmeyer.nl bortzmeyer.nl is free % whois -h whois.sidn.nl is ripe.nl ripe.nl is active Méticiel On développe une bibliothèque métier, assez indépendante de SOAP. Slide 28 package Meticiel; sub is_available () { if ($domain!~ /\.fr$/) { return "We only register domains in \".fr\""; } if (&registered($domain)) { return "Domain $domain already registered"; } return "Domain $domain is available. Buy it soon!"; }

Slide 29 Logiciel réseau Puis on écrit la colle SOAP autour. use SOAP::Transport::HTTP; $hostname = hostname ; chomp $hostname; my $daemon = SOAP::Transport::HTTP::Daemon -> new (LocalAddr => $hostname, LocalPort => 8080) -> dispatch_to(undef, Meticiel, undef, undef); print "Contact to SOAP server at ", $daemon->url, "\n"; $daemon->handle; On peut alors développer les clients. $result = SOAP::Lite -> uri( http://does-not-exist-really-just-a-uri.nic.fr/meticiel ) -> proxy("http://$hostname:8080/") -> is_available($domain); unless ($result->fault) { Slide 30 print $result->result(); print "\n"; } else { print join,, $result->faultcode, $result->faultstring, $result->faultdetail; }

Slide 31 SOAP, sur le câble Uniquement si vous voulez écrire une bibliothèque SOAP s appuie sur les schémas XML. SOAP permet de transmettre du XML brut (à analyser soi-même). POST /StockQuote HTTP/1.1 Content-Type: text/xml; charset="utf-8" Content-Length: 2456 SOAPAction: "http://electrocommerce.org/abc#mymessage" Slide 32 SOAP, sur le câble, suite <SOAP-ENV:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <myapp:getlasttradeprice xmlns:myapp="some-uri"> <symbol>afnic</symbol> </myapp:getlasttradeprice> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Les namespaces (ici, myapp ) permettent de définir ses propres élements, sans risque de collision. Slide 33 SOAP, lectures Un O Reilly assez médiocre Plein de SOAP pour les nuls.

Usine à gaz SOAP, les problèmes Slide 34 Peu interopérable What s wrong with SOAP? wc soap-spec.txt 1519 10671 79445 soap-spec.txt wc xmlrpc-spec.txt 315 1657 15838 xmlrpc-spec.txt Slide 35 Exemples : Google Google a un accès SOAP http://www.google.com/apis/index.html, décrit en WSDL (inscription gratuite et obligatoire)

Slide 36 Exemple, Amazon http://www.amazon.com/webservices IL existe des paquetages tout faits, au dessus de SOAP. % perl amazon-by-keyword.pl ipv6 IPv6 Essentials - $27.97 Understanding Ipv6 - $20.99 IP Addressing and Subnetting, Including IPv6 - $41.97... Slide 37 UDDI, l annuaire universel http://www.uddi.org/ Oasis et d autres. Permet d enregistrer les Web Services, afin de les retrouver. ( The CPAN of Web Services ) Un protocole + plusieurs registres (encore du travail pour les gérants de registre). Un registre UDDI peut être accédé en SOAP mais aussi en XML-RPC ou Corba. Documentation difficile à aborder (Oasis...). L information estr très structurée, avec beaucoup de niveaux.

Et la documentation n est pas en hyper-texte :-( Slide 38 UDDI, exemple use UDDI::Lite +autodispatch => proxy => http://uddi.microsoft.com/inquire ; $info = find_business(name => amazon ) -> businessinfos->businessinfo->serviceinfos->serviceinfo; print $info->name, "\n";

UDDI, plein pot # find_* : "fuzzy" searches # get_* : exact searches, with the key $mybusinesslist = find_business(name => ama ); $mybusinessinfos = $mybusinesslist->businessinfos; @mybusinessinfo = $mybusinessinfos->businessinfo; for $mybusinessinfo (@mybusinessinfo) { Slide 39 print $mybusinessinfo->name, "\n"; print $mybusinessinfo->businesskey, "\n\n"; $myserviceinfos = $mybusinessinfo->serviceinfos; @myserviceinfo = $myserviceinfos->serviceinfo; for $myserviceinfo (@myserviceinfo) { print " ", $myserviceinfo->name, "\n"; print " ", $myserviceinfo->servicekey, "\n"; @myservicedetails = get_servicedetail (servicekey => $myserviceinfo->servicekey); Slide 40 for $myservicedetail (@myservicedetails) { print " ", $myservicedetail->name, "\n"; print " ", $myservicedetail->description, "\n"; $mybindingtemplate = $myservicedetail->bindingtemplates->bindingtemplate; # Actually, several print " ", $mybindingtemplate->description, "\n"; print " ", $mybindingtemplate->accesspoint, "\n"; } print "\n"; } } print "\n\n";

Slide 41 WSDL, méta-informations WSDL est un langage (du W3C http://www.w3c.org/tr/wsdl) pour décrire les API (surtout pour SOAP) Slide 42 WSDL, exemple my $google = SOAP::Lite->service( http://api.google.com/googlesearch.wsdl ); my $result = $google->dogooglesearch( $key, $query, 0, 10, false,, false,, latin1, latin1 );

Slide 43 Utilisateurs : quelques conseils 1. Suivre un tutoriel, 2. Lire la spécification (formelle avec WSDL ou informelle), 3. Écrire le client (choix du langage, de la bibliothèque). Slide 44 Créateurs : quelques conseils 1. Choix importants (paiement, qualité de service, conditions d accès, conditions d usage, sécurité), 2. Écrire la spécification (formelle avec WSDL ou informelle), 3. Écrire la partie métier (si pas encore fait), 4. Écrire le serveur.

Slide 45 L avenir est aux Web Services? Vers une migration technique vers les Web Services? Vers une vraie ouverture des systèmes d information? La fin des semantic firewall?