Les Web Services en 60 diapos chrono !

60
<Web Services/> <Web Services/> Olivier Le Goaër [email protected]

Transcript of Les Web Services en 60 diapos chrono !

Page 1: Les Web Services en 60 diapos chrono !

<Web Services/><Web Services/>

Olivier Le Goaë[email protected]

Page 2: Les Web Services en 60 diapos chrono !

Plan de la formation

Appel de procédure● Locale/distante, synchrone/asynchrone

World Wide Web● Principes techniques du Web

Formats d’échange textuels● XML et JSON

Vers la notion de Web Service● Web APIs, Service-oriented Architecture (SOA)

Web Service de type SOAP et REST

Page 3: Les Web Services en 60 diapos chrono !

Appel de procédureAppel de procédure

Page 4: Les Web Services en 60 diapos chrono !

Appel de procédure locale

Appel (ou invocation) de fonctions/procédures● Rôle appelant-appelés (caller-callee)

function A() {//something to do

}

function B(x) {x++;A(); //appel de A()

}

function C(y) {A();B(y);

}

Code compilé sur une seule et même machine

=Espace d'adressage unique

Page 5: Les Web Services en 60 diapos chrono !

Appel synchrone/asynchrone

Synchrone : l'appelant est bloqué dans l'attente de la terminaison de l'appelé

Asynchrone : l'appelant poursuit son exécution même si l'appelé n'a pas terminé. Néanmoins, il pourra en être averti en retour (callback).

function A() {//something to do

}

function B(x) {A(); //appel synchrone de A()foo(); //instruction qui doit attendre que A() termine

}

Page 6: Les Web Services en 60 diapos chrono !

Signature de procédure

Juste ce qu'il faut savoir pour appeler une procédure correctement● Les détails de l'implémentation ne rentrent pas en ligne

de compte● Nom + paramètres attendus + type de retour éventuel

Un ensemble de signatures forme une interface de programmation● API : Application Programming Interface

function getStockPrice(String stockName) : Float

function distGmaps(String villeDepart, String villeArrivee) : Float

Page 7: Les Web Services en 60 diapos chrono !

Informatique répartie

Systèmes répartis● Programmes indépendants sur des machines distinctes

et communiquant par échange de messages, généralement asynchrones

● Apparaît à un utilisateur comme un système unique et cohérent

Programmation répartie● Interface Description Langage (IDL) : liste de signatures

– Permet de compiler un code qui fait appel (à travers le réseau) à du code pourtant situé sur une autre machine

● Multi-langage : un code écrit en Java doit idéalement pouvoir appeler un code écrit en Python, etc.

Page 8: Les Web Services en 60 diapos chrono !

Appel de procédure distante

Appel de fonctions/procédures● Espaces d'adressage différents !

Passage des paramètres et valeurs retours sous forme de messages● Technique du "marshalling" ou "serialization"

function C(y) {//appels distantsmachine2::A();z = machine2::B(y);

}

function A() {//something to do

}

function B(x) {A(); //appel de A() localreturn x++;

}

y

Machine1 (caller)

Machine2 (callee)

x++

Page 9: Les Web Services en 60 diapos chrono !

Technologies historiques

La solution Corba (Common Object Request Broker Architecture)● La couche ORB se charge d'acheminer les appels

– Utilise une description IDL

L'utilisation de RPC (Remote procedure call) ou RMI (Remote Method Invocation)● Talon client (stub), talon serveur (skeleton)

– Générés à partir d'une description IDL

Page 10: Les Web Services en 60 diapos chrono !

Appel distant : synthèse

Appelant(le client)

Appelant(le client)

Appelé(le serveur)

Appelé(le serveur)

réseau

getStockPrice("IBM")

34.5

??

? ??

?

Page 11: Les Web Services en 60 diapos chrono !

Appel distant : synthèse

Appelant(le client)

Appelant(le client)

Appelé(le serveur)

Appelé(le serveur)

Talon coté client(stub)

Talon coté serveur(skeleton)

Protocole de communication

Protocole de communication

réseau

ORB/IIOP

Interface écrite en « IDL »

Compilateur IDL

Page 12: Les Web Services en 60 diapos chrono !

Technologie Web Service

L'utilisation de Web Services (WS)● XML-RPC, JSON-RPC, SOAP, ...

– Repose sur une description WSDL (≈ IDL)● REST

– Repose (pour l'instant) sur une interface unifiée● Description WADL proposée par le W3C en 2009

Idée : réutiliser l'infrastructure World Wide Web● Les procédures distantes sont des URLs

– Architecture client (appelant)/serveur(appelé)– Le protocole de communication HTTP a fait ses preuves

● Reste à s'accorder sur les messages échangés...

Page 13: Les Web Services en 60 diapos chrono !

En route pour les WS...

Machine2::getStockPrice("IBM")Machine2::getStockPrice("IBM")

Http://128.45.67.10:80/getStockPrice?stockName=IBM

http://www.example.org/getStockPrice?stockName=IBM

Noms de domaines

Page 14: Les Web Services en 60 diapos chrono !

World Wide WebWorld Wide Web

Page 15: Les Web Services en 60 diapos chrono !

WWW : rétrospective

1989 : les travaux Tim Berners-Lee et son équipe au CERN (Suisse) débouchent sur le langage HTML et le protocole HTTP.

1993 : NCSA (National Center for Supercomputing Applications) lance le navigateur graphique Mozaïc qui est gratuit

Depuis 1994, le W3C (World Wide Web Consortium) standardise un ensemble de technologies reliées au Web● HTML, CSS, XML, SOAP, ...

Page 16: Les Web Services en 60 diapos chrono !

Architecture client/serveur

C'est toujours le client qui est à l'initiative de la connexion au serveur ("maître/esclave").

Serveur Webwww.twitter.comServeur Web

www.twitter.com

Client Web : Chrome

Requête http

Réponse http

Exécution sur le serveur(ASP, PHP, JSP, ...)

Execution sur le client(HTML, CSS, JavaScript, ...)

1

3

24

Page 17: Les Web Services en 60 diapos chrono !

Anatomie d'une URL

Uniform Resource Locator● http://host:[port]/path/resource#signet

Données additionnelles (a.k.a paramètres)● /resource?param1=value1&param2=value2&...

Règles de bonne formation● Pas d'espaces, pas d'accents (cf. encodage)

Exemples familiers● http://www.univ-pau.fr:80/fr/index.html● https://www.meteofrance.com/previsions?ville=pau

Page 18: Les Web Services en 60 diapos chrono !

Le protocole HTTP

Le protocole HTTP (HyperText Transfer Protocol) permet d'encapsuler des données qui transitent entre un client et un serveur Web

ClientServeur

Web

Requête HTTP (1)

Réponse HTTP (2)

Interprète les ressources Héberge des ressources

Page 19: Les Web Services en 60 diapos chrono !

Mode déconnecté

HTTP fonctionne en mode déconnecté1. Le serveur Web reçoit une demande de connexion de la part d’un

client Web;

2. Après l'établissement de la connexion, le client envoie une requête HTTP qui demande une ressource particulière;

3. Le serveur Web renvoie vers le client la ressource via un flux HTTP;

4. Le serveur interrompt la connexion avec le client

AVANTAGES INCONVENIENTS le serveur Web peut supporter un grand nombre de clients portabilité du client

l’établissement d’une connexion est coûteux en temps grande consommation de bande passante impossible de maintenir un contexte (stateless)

Page 20: Les Web Services en 60 diapos chrono !

Format des requêtes HTTP

GET /docu.html HTTP/1.0Accept: text/htmlAccept: image/gif

User-Agent: Mozilla/4.7* une ligne blanche *

POST /script HTTP/1.0Accept: text/htmlAccept: image/gif

User-Agent: Mozilla/4.7Content-Length: 24* une ligne blanche *

name1=value1&name2=value2

Méthode

Ressource Version

Corps

entête

Page 21: Les Web Services en 60 diapos chrono !

Méthodes et entêtes des requêtes

Méthodes de la requête● GET : demander quelque chose (une ressource) et envoi de données

● HEAD : demander les informations concernant l’entête d’un document

● POST : envoi de données à une ressource (typiquement un script)

● ...

Entête de la requête● Accept : Accepte une liste de types MIME (Multipurpose Internet Mail Extension)

● Accept-Encoding : Une liste de méthodes de codage MIME

● User-Agent : un identificateur du client

● Authorization : login password (faible au niveau sécurité)

● ...

Page 22: Les Web Services en 60 diapos chrono !

Passage de paramètres

Par la méthode GET● les paramètres sont directement inclus dans l'URL● une séquence de paires clé=valeur, séparées par une

esperluette (&) :– /script?name=Le+Goaer&surname=Olivier&...

Par la méthode POST● les paramètres sont encapsulés dans le corps de la

requête HTTP● les données peuvent même prendre une forme libre,

tant que le serveur sait comment les traiter

Page 23: Les Web Services en 60 diapos chrono !

Méthode GET ou POST ?

Confidentialité des données● GET : les paramètres sont visibles dans l'URL● POST : les paramètres ne sont pas visibles

Volume des données● GET : les URLs ont une limite de caractères

– 255 sur les vieux serveurs, + de 8000 aujourd'hui● POST : aucune limitation du volume des données

Page 24: Les Web Services en 60 diapos chrono !

HTTP/1.0 200 OKDate: Wed, 02Feb97 23:04:12 GMT

Server: Apache/1.3.6Last-modified: Mon,15Nov96 23:33:16 GMT

Content-type: text/htmlContent-length: 2345* une ligne blanche *

<html><head><title> …</body></html>

Type de serveur

Code status

Corps

Format des réponses HTTP

Page 25: Les Web Services en 60 diapos chrono !

Entêtes et corps des réponses

Entêtes de réponse● Server: type de serveur

● Date: la date de traitement de la requête

● Content-Type: le type MIME de la ressource renvoyée

● Content-length: la taille en octets de la ressource renvoyée

● ...

Corps de la réponse● Un seul objet par réponse● Du texte dans le cas d'un document XML ou JSON, des

octets dans le cas d'une image ou d'un son, etc.

Page 26: Les Web Services en 60 diapos chrono !

Code de réponses des serveurs

La première ligne de la réponse d'un serveur donne● la version du protocole HTTP utilisé● un code d'état sur 3 chiffres● une description du résultat

CODES D'ETATS

100--199 Message informatif

200--299 Requête du client accomplie avec succès

300--399 Requête du client redirigée, d'autres actions sont nécessaires

400--499 Requête du client incomplète (ex: 404: non trouvé )

500--599 Erreurs du serveur

Page 27: Les Web Services en 60 diapos chrono !

Exemple de communication

Accept: image/gif, image/jpegAccept-language:en-usAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0

HTTP/1.1 200 OKDate: Mon, 06 Jan 2014 13:45:24 GMTServer:Apache/1.3.6 (Unix)Last Modified: Fri, O4 oct 2015 14:08:23 GMTContent-Length:458Content-type:text/html

<html><head><title>The New York Times</title></head><body> … </body></html>

CLIENT SERVEURRequête (1)

Réponse (2)

GET /featured/ HTTP/1.1

Page 28: Les Web Services en 60 diapos chrono !

Formats d'échange Formats d'échange textuelstextuels

Page 29: Les Web Services en 60 diapos chrono !

Formats d'échange

Formats textuels● Human-readable● Portable (à l'encodage de caractère près)

Aisément manipulable à l'aide de « Parsers »● Parsers DOM et SAX pour XML

– Expressions Xpath, XQuery● Parsers JSON

APIs de parsing disponibles dans quasiment tous les langages de programmation

Page 30: Les Web Services en 60 diapos chrono !

XML (eXtensible Markup Language)

Est un « méta » langage● En soit, il n'exprime rien, mais sert à en définir d'autre

Concepts● Eléments (a.k.a balises) et attributs● Imbrication des éléments, sans chevauchement

Importance du schéma (anciennement DTD)● Fige le vocabulaire et les imbrications possibles● Engendre de-facto un langage

– html, xml soap, wsdl, kml, svg, mathml...

Page 31: Les Web Services en 60 diapos chrono !

XML : exemple

<?xml version="1.0" encoding="UTF-8"?><users> <user data-id="101"> <nom>Zorro</nom> <metier>Danseur</metier> </user> <user data-id="102"> <nom>Hulk</nom>

<metier>Footballeur</metier> </user> <user data-id="103"> <nom>Zidane</nom> <metier>Star</metier> </user> <user data-id="104"> <nom>Batman</nom> <metier>Veterinaire</metier> </user></users>

Page 32: Les Web Services en 60 diapos chrono !

JSON (JavaScript Object Notation)

Absence de schéma (schemaless)● JSON est un meta-langage : chacun fait ce qu'il veut !

Concepts simples● Stockage sous la forme key:value● Valeur de 2 types

– Object {}– Array []

Page 33: Les Web Services en 60 diapos chrono !

JSON : exemple

{ users: [ { id: 101, nom: "Zorro", metier: "Danseur" }, { id: 102, nom: "Hulk", metier: "Footballeur" }, { id: 103, nom: "Zidane", metier: "Star" }, { id: 104, nom: "Batman", metier: "Veterinaire" } ]}

Page 34: Les Web Services en 60 diapos chrono !

Vers la notion deVers la notion deWeb ServiceWeb Service

Page 35: Les Web Services en 60 diapos chrono !

Intéropérabilité entre SI

Protocole standard

Requête métier normalisée

1

Réponse métier normalisée

5

PasserelleServices

2

4

Traitementmétier

3

SI Agence de voyage Fram

SI Air France

partie opaque (neutralité technologique)

SI Mercure

Page 36: Les Web Services en 60 diapos chrono !

Service + Web = Service Web

Protocole http

Requête http JSON/XML

1

Réponse http JSON/XML

5

PasserelleWeb Services

2

4

Traitementmétier

3

CLIENTSERVEUR WEB

partie opaque (PHP, ASP, JSP, Node.js, ...)

Page 37: Les Web Services en 60 diapos chrono !

Deux Webs co-existent désormais

Resources destinées à être consommées par un humain : le « Web des documents »● Le client est un navigateur → Pages Web● S'adressent à monsieur tout le monde

Resources destinées à être consommées par une machine : le « Web des services »● Le client est un programme → Services Web● S'adressent aux développeurs

Une même information peut être fournie par ces 2 biais, selon le bon vouloir du fournisseur

Page 38: Les Web Services en 60 diapos chrono !

Exemple d'une info financière

https://fr.finance.yahoo.com/ Page Web (l'information est noyée)

http://download.finance.yahoo.com/d/quotes.csv?s=EURUSD=X&f=l1 Service Web(information brute)

Page 39: Les Web Services en 60 diapos chrono !

API Open Data

Philosophie d'ouverture et d'intéropérabilité● Exemple : construire des applications "mashup"

Jeux de données librement téléchargables via le site web du fournisseur● Cas des pages web (ne nous intéresse pas ici)● Formats d'export CSV, EXCEL, ...

Jeux de données accessibles via des APIs Web● Liste des signatures des procédures appelables● Des procédures distantes souvent limitées (read-only)

– Exportations de données situées en base

Page 40: Les Web Services en 60 diapos chrono !

Open Data : quelques exemples

Gouvernement

www.data.gouv.fr

Gouvernement

www.data.gouv.fr

Vie locale

opendata.agglo-pau.fr,opendata.paris.fr, ...

Vie locale

opendata.agglo-pau.fr,opendata.paris.fr, ...

Cartographie

API Google Maps (payant),API OpenStreetMap, ...

Cartographie

API Google Maps (payant),API OpenStreetMap, ...

Transports

data.sncf.com,developer.airfranceklm.com

Transports

data.sncf.com,developer.airfranceklm.com

......

Page 41: Les Web Services en 60 diapos chrono !

Exemple du groupe La Poste

Page 42: Les Web Services en 60 diapos chrono !

Exemple de l'entreprise Garmin

Page 43: Les Web Services en 60 diapos chrono !

Exemple de Twitter

Page 44: Les Web Services en 60 diapos chrono !

Exemple de PrestaShop (Backoffice)

Page 45: Les Web Services en 60 diapos chrono !

Contrôles au niveau de l'API

Contrôle d'accès● Permet au fournisseur d'authentifier et d'autoriser (ou

non) un consommateur via un identifiant unique● Souvent un simple paramètre ("APIkey", "token", ...)

supplémentaire au moment de l'appel– http://provider/service?key=HD454DSJH9

Contrôle d'usage● Basé sur le contrôle d'accès ci-dessus, et permet au

fournisseur de fixer des quotas (ex: max 15 requêtes http/jour)

Contrôle = monétisation des services !

Page 46: Les Web Services en 60 diapos chrono !

Métaphore du service

Un fournisseur de service● Le serveur (l'appelé) propose une offre de service

Un consommateur de service● Le client (l'appelant) est en demande d'un service

Un annuaire (ou registre) de service● Le client découvre les services existants

Une négociation entre les 2 parties● Si les termes du "contrat" conviennent (tarif, qualité,

quantité, etc.), l'appel de procédure a lieu

Page 47: Les Web Services en 60 diapos chrono !

Architecture orientée service (SOA)

Consommateurde service(s)

Consommateurde service(s)

Fournisseurde service(s)

Fournisseurde service(s)

Offre/contrat de service

Annuaire publicde service(s)

Annuaire publicde service(s)

appel(s) de service(s)

publicationdemande

+Orchestration

de service

Page 48: Les Web Services en 60 diapos chrono !

Web Service de type Web Service de type SOAP et RESTSOAP et REST

Page 49: Les Web Services en 60 diapos chrono !

Simple Object Access Protocol

Protocole de transport● HTTP quasi-unanimement (rarement SMTP, FTP, ...)

Format d'échange● XML SOAP

Description des services● WSDL (Web Services Description Language)

Annuaire● UDDI (Universal Description Discovery and Integration)

Technologies standardisées par le W3C

Page 50: Les Web Services en 60 diapos chrono !

Architecture orientée service (SOA)

Consommateurde service(s)

Consommateurde service(s)

Fournisseurde service(s)

Fournisseurde service(s)

WSDL

Annuairede service(s)

Annuairede service(s) UDDI

getStockPrice("IBM")

publicationdemande

SOAPhttp://www.example.org/InStock

Page 51: Les Web Services en 60 diapos chrono !

Message xml SOAP

<?xml version="1.0"?>

<soap:Envelopexmlns:soap="http://www.w3.org/2003/05/soap-envelope/"soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>...</soap:Header>

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

</soap:Envelope>

Page 52: Les Web Services en 60 diapos chrono !

Requête SOAP

Spécifique au domaine métier (décrit par WSDL)

POST /InStock HTTP/1.1Host: www.example.orgContent-Type: application/soap+xml; charset=utf-8Content-Length: 250

<?xml version="1.0"?>

<soap:Envelopexmlns:soap="http://www.w3.org/2003/05/soap-envelope/"soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPrice> <m:StockName>IBM</m:StockName> </m:GetStockPrice></soap:Body>

</soap:Envelope>

http

Page 53: Les Web Services en 60 diapos chrono !

Réponse SOAP

HTTP/1.1 200 OKContent-Type: application/soap+xml; charset=utf-8Content-Length: 200

<?xml version="1.0"?>

<soap:Envelopexmlns:soap="http://www.w3.org/2003/05/soap-envelope/"soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPriceResponse> <m:Price>34.5</m:Price> </m:GetStockPriceResponse></soap:Body>

</soap:Envelope>

http

Page 54: Les Web Services en 60 diapos chrono !

Exemple avec un client KSOAP

API client SOAP pour Android (Java) String METHOD_NAME = "getStockPrice"; String NAMESPACE = "http://www.example.org/"; String SOAP_ACTION = "http://www.example.org/InStock/"; String URL = "http://www.example.org/stock"; //WSDL

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); request.addProperty("StockName", "IBM");

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request);

HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

androidHttpTransport.call(SOAP_ACTION, envelope); SoapObject response = (SoapObject)envelope.getResponse();

//ici manipulation de l'objet résultat Float valueStock = (Float) response.getProperty("price");

Page 55: Les Web Services en 60 diapos chrono !

REpresentational State Transfer

HTTP définit quatre (principaux) verbes pour la manipulation des ressources● GET : récupérer l’état de la ressource● PUT : attribuer l’état de la ressource● DELETE : supprimer la ressource● POST : fournir des données à la ressource

HTTP définit 40 codes de statut, répartis en cinq catégories

Tout cela est bien suffisant pour faire du RPC !

« CRUD »CreateRead

UpdateDelete

Page 56: Les Web Services en 60 diapos chrono !

Requête et réponse REST

GET /InStock/IBM/ HTTP/1.1Host: www.example.org

GET /InStock/stockPrice?stockName=IBM HTTP/1.1Host: www.example.org

HTTP/1.1 200 OKContent-Type: application/json; charset=utf-8Content-Length: 32

{ price: 34.5, currency: "USD" }

Ou bien...

Page 57: Les Web Services en 60 diapos chrono !

Exemple avec un client Ajax

Asynchronous JavaScript and XML (AJAX)

var req = new XMLHttpRequest(); //API cliente unique

//methode http GETreq.open('GET', 'http://www.exemple.org/InStock/IBM/', true);

req.onreadystatechange = function (aEvt) { //callbackif (req.readyState == 4) {

if(req.status == 200) { //code retour serveur OKvar resp = JSON.parse(req.responseText); //parsing JSONwindow.alert(resp.price & ' ' & resp.currency);

}}

};

req.send(); //envoie la requête au serveur

Page 58: Les Web Services en 60 diapos chrono !

SOAP versus REST (1/2)

Le degré de liaison entre le client et le serveur● Fort avec SOAP

– APIs client spécifiques, pas forcément disponibles● Faible avec REST

– API client unique (un simple client http), disponible dans tous les langages de programmation

La sémantique● SOAP met l'accent sur les opérations/procédures

– HTTP est réduit à une simple couche de transport● REST met l'accent sur une interface unifiée

– Verbes HTTP, code de retours HTTP, etc.

Page 59: Les Web Services en 60 diapos chrono !

SOAP versus REST (2/2)

Soap reste complexe à mettre en oeuvre● WSDL demeure une technologie intéressante

– Services auto-décrits. Interface versus implémentation– APIs clients générées à partir de cette description

● Le concept d'annuaire UDDI a fait un flop● Profusion d’extensions (WS-Policy, WS-Security, WS-

Trust, etc.)

Le style REST brille par sa simplicité● Ce concept d'interface unifiée a fait ses preuves dans

d'autres domaines de l'informatique (ex: fichiers Unix)

Page 60: Les Web Services en 60 diapos chrono !

L'avenir du Web Service : HATEOAS

Hypermedia As The Engine Of Application State● Point culminant du style REST

S'approprier HTTP● Créer ses propres verbes d'action métier HTTP● Créer ses propres codes de retour métier HTTP

Exploiter le concept de lien hypermédia● Le retour des procédures appelées peut inclure des

URLs qui à leur tour peuvent être appelées, et ainsi de suite...

● Autre façon de réaliser des orchestrations de services