SlideShare uma empresa Scribd logo
1 de 59
Baixar para ler offline
Normes avancées du WebNormes avancées du Web
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Sujets spéciaux en TI
Le Web 2.0 : concepts et outils
École de technologie supérieure
par
Claude Coulombe
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Normes avancées du WebNormes avancées du Web
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
 AjaxAjax
 Architecture SOAArchitecture SOA
 XSL - XSLTXSL - XSLT
 JSONJSON
 RSS 2.0RSS 2.0
 Atom 0.3 et 1.0Atom 0.3 et 1.0
 RESTREST
 Google GearsGoogle Gears
 CometComet
Normes avancées du WebNormes avancées du Web
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Améliorer l'expérience-utilisateur par des interfaces riches et réactivesAméliorer l'expérience-utilisateur par des interfaces riches et réactives
Répondre aux besoins des architectures distribuéesRépondre aux besoins des architectures distribuées
Implémenter les architectures à base de services WebImplémenter les architectures à base de services Web
Assurer la compatibilité entre les différents fureteurs et les différentesAssurer la compatibilité entre les différents fureteurs et les différentes
technologies serveurstechnologies serveurs
Obtenir de l'information à la carte et des interfaces riches en contenuObtenir de l'information à la carte et des interfaces riches en contenu
Faciliter la réutilisation, le partage (syndication) et la transformation desFaciliter la réutilisation, le partage (syndication) et la transformation des
donnéesdonnées
Pourquoi de nouvelles normes?Pourquoi de nouvelles normes?
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
AjaxAjax
AjaxAjax
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
AjaxAjax – Une véritable percée!– Une véritable percée!
AJAXAJAX
Le premier à utiliser le terme AJAX
fut Jesse James Garrett en février 2005
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
 Ajax (Asynchronous JavaScript & XML)Ajax (Asynchronous JavaScript & XML)
 Fini le pénible rechargement de pages!Fini le pénible rechargement de pages!
 Réalise des requêtes asynchrones au serveurRéalise des requêtes asynchrones au serveur
et fait la mise-à-jour de la page Web sans faireet fait la mise-à-jour de la page Web sans faire
de chargement completde chargement complet
 Applications Web plus réactives et plusApplications Web plus réactives et plus
dynamiquesdynamiques
 Objet XMLHttpRequest inventé par M$Objet XMLHttpRequest inventé par M$
 Basé sur du code-client en JavaScriptBasé sur du code-client en JavaScript
AjaxAjax – Une véritable percée!– Une véritable percée!
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Ajax –Ajax – Diagramme de collaborationDiagramme de collaboration
Source : J.J. Garrett 2005 - http://www.adaptivepath.com/ideas/essays/archives/000385.php
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Ajax – Diagramme de séquenceAjax – Diagramme de séquence
Source : J.J. Garrett 2005 - http://www.adaptivepath.com/ideas/essays/archives/000385.php
En mode asynchrone, l'exécution dans le fureteur sur
le poste client se poursuit sans attendre la réponse du
serveur. La réponse sera traitée par une fonction de
retour (fonction Callback) quand elle arrivera. L'état
de la requête est donné par l'attribut readyState de
l'objet XMLHttpRequest.
En mode synchrone, le fureteur est gelé en attendant
la réponse du serveur.
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Ajax - Avantages & inconvénientsAjax - Avantages & inconvénients
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Ajax - InconvénientsAjax - Inconvénients
 Effet « buzzword »Effet « buzzword »
 Problèmes de compatibilité entre les différents fureteursProblèmes de compatibilité entre les différents fureteurs
 Ne fonctionne pas si JavaScript est désactivéNe fonctionne pas si JavaScript est désactivé
 Les données chargées de façon dynamique ne sont pasLes données chargées de façon dynamique ne sont pas
indexées par les moteurs de rechercheindexées par les moteurs de recherche
 Si le traitement du côté serveur est long, le traitementSi le traitement du côté serveur est long, le traitement
asynchrone d'Ajax fait que les changements se font avec unasynchrone d'Ajax fait que les changements se font avec un
délaidélai
 Le bouton de retour en arrière, l'URL ne change pas et lesLe bouton de retour en arrière, l'URL ne change pas et les
signets ne fonctionnent passignets ne fonctionnent pas
 Pas d'accès* en dehors du domaine du serveurPas d'accès* en dehors du domaine du serveur
 Plus exigeant sur le poste client (vieux PC ?)Plus exigeant sur le poste client (vieux PC ?)
* Note : En anglais « Same Origin Policy »
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Ajax - AvantagesAjax - Avantages
 Réponses rapides aux actions de l'utilisateurRéponses rapides aux actions de l'utilisateur
 Applications Web riches, rapides et légèresApplications Web riches, rapides et légères
 Pas de long téléchargement, ni d'installationPas de long téléchargement, ni d'installation
 Permet de modifier partiellement la page affichée par lePermet de modifier partiellement la page affichée par le
fureteur pour la mettre à jour sans avoir à recharger la pagefureteur pour la mettre à jour sans avoir à recharger la page
entière.entière.
 Réduit la quantité d'information demandée au serveurRéduit la quantité d'information demandée au serveur
 Fait davantage de traitement du côté client (en JavaScript)Fait davantage de traitement du côté client (en JavaScript)
et moins sur le serveur et le réseauet moins sur le serveur et le réseau
 Donc économie du serveur et de la bande passanteDonc économie du serveur et de la bande passante
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Architecture SOAArchitecture SOA
SOASOA
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
SOA (Service Oriented Architecture) Architecture orientée servicesSOA (Service Oriented Architecture) Architecture orientée services
Basée sur les services Web (WS) et les composants logicielsBasée sur les services Web (WS) et les composants logiciels
Reprend les concepts du calcul distribuéReprend les concepts du calcul distribué
Un service établit une relation entre un composant producteur et unUn service établit une relation entre un composant producteur et un
composant consommateurcomposant consommateur
Application : ensemble de services qui communiquent par des messagesApplication : ensemble de services qui communiquent par des messages
Utilisation de messages « en format ouvert » le plus souvent en XMLUtilisation de messages « en format ouvert » le plus souvent en XML
Possibilité d'activation par des événements*Possibilité d'activation par des événements*
Régie selon des contrats d'échangeRégie selon des contrats d'échange
Souvent définie en termes de couches applicativesSouvent définie en termes de couches applicatives
Service synchrone ou asynchroneService synchrone ou asynchrone
Populaire dans le e-commerce (B2B et B2C)Populaire dans le e-commerce (B2B et B2C)
Plateformes JEE et .NETPlateformes JEE et .NET
Architecture SOAArchitecture SOA
* Note : une évolution intéressante!
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
L'annuaire des services référence tous les servicesL'annuaire des services référence tous les services
Le bus a un rôle d'intermédiaire entre le producteur et le consommateur du serviceLe bus a un rôle d'intermédiaire entre le producteur et le consommateur du service
Un service peut implémenter plusieurs interfacesUn service peut implémenter plusieurs interfaces
Un service doit respecter un contrat (ou règles de fonctionnement)Un service doit respecter un contrat (ou règles de fonctionnement)
Architecture SOAArchitecture SOA
* Source : Wikipedia & Dirk Krafzig, Karl Banke, and Dirk Slama.
Enterprise SOA. Prentice Hall, 2005
SOA
Interface
d'application
Service
Annuaire
des services
Bus de service
ImplémentationContrat Interface
Logique
d'affaire
Données
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Origine : protocole de communication entre objets distribués ORB (ObjectOrigine : protocole de communication entre objets distribués ORB (Object
Request Broker) comme CORBA*, DCOM et RMI (format propriétaireRequest Broker) comme CORBA*, DCOM et RMI (format propriétaire
binaire, lourdeur, complexité).binaire, lourdeur, complexité).
Idée : HTTP et XMLIdée : HTTP et XML
XML-RPC, un protocole de service web simple, précurseur de SOAP, quiXML-RPC, un protocole de service web simple, précurseur de SOAP, qui
est à la base de plusieurs APIs pour les services de bloguesest à la base de plusieurs APIs pour les services de blogues
SOAP (Simple Object Access Protocol) avec WSDL (Web ServicesSOAP (Simple Object Access Protocol) avec WSDL (Web Services
Description language), invocation du service selon le protocole SOAPDescription language), invocation du service selon le protocole SOAP
SOAP est passé de simple à complexe par l'effet combiné d'une tendanceSOAP est passé de simple à complexe par l'effet combiné d'une tendance
à concevoir pour résoudre tous les problèmes (over-engineered) et de laà concevoir pour résoudre tous les problèmes (over-engineered) et de la
conception par comité.conception par comité.
RPC (Remote Procedure Call) est basé sur l'échange d'objets entre leRPC (Remote Procedure Call) est basé sur l'échange d'objets entre le
client et le serveurclient et le serveur
REST retour aux sources...REST retour aux sources...
Services WebServices Web
* Note : CORBA est un bel exemple de conception par comité
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
SOA - Avantages & inconvénientsSOA - Avantages & inconvénients
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
« Phénomène de mode »« Phénomène de mode »
Tendance à la multiplication des couches et des messagesTendance à la multiplication des couches et des messages
Difficile à testerDifficile à tester
Problème de coordination ou orchestration entre les divers servicesProblème de coordination ou orchestration entre les divers services
Problème de sécuritéProblème de sécurité
Problème de réelle interopérabilitéProblème de réelle interopérabilité
On constate une certaine lourdeur et de la complexitéOn constate une certaine lourdeur et de la complexité
SOAP est lourd et complexeSOAP est lourd et complexe
Difficile d'imaginer des communications SOAP directe avec uneDifficile d'imaginer des communications SOAP directe avec une
application Web au niveau fureteur (client-centric). Pas de service SOAPapplication Web au niveau fureteur (client-centric). Pas de service SOAP
dans un client JavaScriptdans un client JavaScript
SOA - InconvénientsSOA - Inconvénients
* Note : le plus souvent en XML
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Couplage faibleCouplage faible
Favorise les échanges entre toutes sortes de logiciels, peu importe leursFavorise les échanges entre toutes sortes de logiciels, peu importe leurs
langages de programmationlangages de programmation
Favorise la réutilisationFavorise la réutilisation
Favorise l'interopérabilitéFavorise l'interopérabilité
Favorise une réponse et une adaptation plus rapides des systèmesFavorise une réponse et une adaptation plus rapides des systèmes
informatiques aux changements dans l'environnement technologiqueinformatiques aux changements dans l'environnement technologique
SOAP offre des possibilités étendues pour le traitement sécuritaire desSOAP offre des possibilités étendues pour le traitement sécuritaire des
transactionstransactions
SOA ouvre la voie à des architectures Web à base d'événements (EventSOA ouvre la voie à des architectures Web à base d'événements (Event
Driven)Driven)
SOA - AvantagesSOA - Avantages
* Note : le plus souvent en XML
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
SOA et Web 2.0 ont beaucoup d'éléments en communSOA et Web 2.0 ont beaucoup d'éléments en commun
Vision commune d'un Internet des servicesVision commune d'un Internet des services
Répondent à des besoins et des clientèles différentesRépondent à des besoins et des clientèles différentes
Il y a beaucoup de potentiel à combiner les technologies et les principesIl y a beaucoup de potentiel à combiner les technologies et les principes
du Web 2.0 et de l'architecture SOAdu Web 2.0 et de l'architecture SOA
Programmation événementielle ou à base d'événementsProgrammation événementielle ou à base d'événements
SOA & Web 2.0SOA & Web 2.0
* Note : le plus souvent en XML
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
XSL - XSLTXSL - XSLT
XSL / XSLTXSL / XSLT
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
XSL (eXtensible Stylesheet Language)XSL (eXtensible Stylesheet Language)
XSLT (XML Stylesheet Language for Transformations) transforme unXSLT (XML Stylesheet Language for Transformations) transforme un
document source balisé (XML) en un second document (généralementdocument source balisé (XML) en un second document (généralement
balisé lui-aussi)balisé lui-aussi)
Technologies d'extraction et de transformation des donnéesTechnologies d'extraction et de transformation des données
Peu valorisées à l'image des bases de données mais essentiellesPeu valorisées à l'image des bases de données mais essentielles
Les documents obtenus par Ajax sont souvent trop complexes pour êtreLes documents obtenus par Ajax sont souvent trop complexes pour être
traitées « manuellement » à partir de l'API DOMtraitées « manuellement » à partir de l'API DOM
Utilisation de l'extraction XPath ou des transformations XSLT pour obtenirUtilisation de l'extraction XPath ou des transformations XSLT pour obtenir
des données utilesdes données utiles
XSL / XSLTXSL / XSLT
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
entreeD1.xmlentreeD1.xml
<?xml version="1.0"?><?xml version="1.0"?>
<doc>Bonjour XSLT</doc><doc>Bonjour XSLT</doc>
D1versD2.xslD1versD2.xsl
<?xml version="1.0"?><?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="doc"><xsl:template match="doc">
<out><xsl:value-of select="."/></out><out><xsl:value-of select="."/></out>
</xsl:template></xsl:template>
</xsl:stylesheet></xsl:stylesheet>
sortieD2.xmlsortieD2.xml
<?xml version="1.0"?><?xml version="1.0"?>
<out>Bonjour XSLT</out><out>Bonjour XSLT</out>
XSL / XSLT – Petit eXSL / XSLT – Petit exemple...xemple...
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
import javax.xml.transform.*;import javax.xml.transform.*;
// Utilisation de l'interface TraX pour réaliser une transformation// Utilisation de l'interface TraX pour réaliser une transformation
// de la la manière la plus simple possible, en trois instructions// de la la manière la plus simple possible, en trois instructions
public class TransformDOC1versDOC2 {public class TransformDOC1versDOC2 {
public static void main(String[] args) throws TransformerException,public static void main(String[] args) throws TransformerException,
TransformerConfigurationException, FileNotFoundException, IOException {TransformerConfigurationException, FileNotFoundException, IOException {
if (args.length != 3 || args[0].equals("--aide")) {if (args.length != 3 || args[0].equals("--aide")) {
System.out.println("java TransformDOC1versDOC2 D1versD2.xsl entreeD1.xml sortieD2.xml");System.out.println("java TransformDOC1versDOC2 D1versD2.xsl entreeD1.xml sortieD2.xml");
return;return;
}}
TransformerFactory transFact = TransformerFactory.newInstance();TransformerFactory transFact = TransformerFactory.newInstance();
Transformer transformer = transFact.newTransformer(new StreamSource(args[0]));Transformer transformer = transFact.newTransformer(new StreamSource(args[0]));
transformer.transform(new StreamSource(args[1]), new StreamResult(new FileOutputStream(args[2])));transformer.transform(new StreamSource(args[1]), new StreamResult(new FileOutputStream(args[2])));
}}
}}
XSL / XSLT – Un peu de code...XSL / XSLT – Un peu de code...
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Du côté serveur : JAXPDu côté serveur : JAXP (Java API for XML Processing)(Java API for XML Processing)
Traitement du XML (validation, analyse, transformation) qui regroupe un ensemble d'outils JavaTraitement du XML (validation, analyse, transformation) qui regroupe un ensemble d'outils Java
pour le traitement du XML dont l'analyseur (parser) Xerces.pour le traitement du XML dont l'analyseur (parser) Xerces.
JAXP regroupe les deux principales interfaces d'analyse (parsage) de documents XML :JAXP regroupe les deux principales interfaces d'analyse (parsage) de documents XML :
DOM (Document Object Model) qui construit un arbre en mémoireDOM (Document Object Model) qui construit un arbre en mémoire
SAX (Simple API for XML) qui base son analyse sur le déclenchementSAX (Simple API for XML) qui base son analyse sur le déclenchement
d'événements (et évocation de fonctions callback)d'événements (et évocation de fonctions callback)
API de transformation XSLT qui s'appuie sur le moteur de transformation Xalan.API de transformation XSLT qui s'appuie sur le moteur de transformation Xalan.
Depuis Java 5, JAXP est inclus dans le JDK et fait donc partie du langage Java de base.Depuis Java 5, JAXP est inclus dans le JDK et fait donc partie du langage Java de base.
Autres ressources serveurs : JDOM, dom4j et StAXAutres ressources serveurs : JDOM, dom4j et StAX
Du côté client : la bibliothèque JavaScript Google AjaxSLTDu côté client : la bibliothèque JavaScript Google AjaxSLT
http://goog-ajaxslt.sourceforge.net/http://goog-ajaxslt.sourceforge.net/
XSL / XSLT - outilsXSL / XSLT - outils
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
JSONJSON
JSONJSON
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
JSON : JavaScript Object NotationJSON : JavaScript Object Notation
Notation beaucoup plus compacte que le XMLNotation beaucoup plus compacte que le XML
=> consomme moins de bande passante=> consomme moins de bande passante
Directement interprétable par JavaScriptDirectement interprétable par JavaScript
=> demande moins de traitement=> demande moins de traitement
On assiste au développement d'un ensemble d'outils pour JSON qui sontOn assiste au développement d'un ensemble d'outils pour JSON qui sont
directement inspirés de ce qui existe déjà pour XMLdirectement inspirés de ce qui existe déjà pour XML
http://www.json.org/json-fr.htmlhttp://www.json.org/json-fr.html
JSONJSON
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
JavaScript – Notation JSONJavaScript – Notation JSON
Un prototype JavaScript en notation JSON commence parUn prototype JavaScript en notation JSON commence par {{ et se termine paret se termine par }}. Il. Il
contient un ensemble de couples attribut/valeur non ordonnés. Chaque attribut estcontient un ensemble de couples attribut/valeur non ordonnés. Chaque attribut est
suivi desuivi de :: et les couples attribut/valeur sont séparés par une et les couples attribut/valeur sont séparés par une ,,
var auto =var auto = {{
fabricantfabricant : ': 'Toyota',Toyota',
modele : 'Prius',modele : 'Prius',
couleur : 'vert',couleur : 'vert',
proprio : {proprio : {
nom = 'Lyne';nom = 'Lyne';
}}
};};
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
RSSRSS
RSSRSS
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Fil, flux ou canal RSS: syndication de contenuFil, flux ou canal RSS: syndication de contenu
Inventé chez Netscape en 1999 puis amélioré par Dave WinerInventé chez Netscape en 1999 puis amélioré par Dave Winer
RSS : Really Simple Syndication (à l'origine RDF* Site Summary)RSS : Really Simple Syndication (à l'origine RDF* Site Summary)
Ajouter facilement des contenus de d'autres sites (syndication)Ajouter facilement des contenus de d'autres sites (syndication)
Basé sur le XML, le RSS définit une liste d'items de contenu avec une URLBasé sur le XML, le RSS définit une liste d'items de contenu avec une URL
par item accompagnée de métadonnées qui décrivent le contenupar item accompagnée de métadonnées qui décrivent le contenu
Utilisé pour du contenu qui change fréquemment (diffusion de nouvelles,Utilisé pour du contenu qui change fréquemment (diffusion de nouvelles,
cours de la bourse, météo)cours de la bourse, météo)
Afficher les nouveautés d'un blogue (billets récents)Afficher les nouveautés d'un blogue (billets récents)
Baladodiffusion audio (flux RSS audio) et vidéo (flux RSS vidéo)Baladodiffusion audio (flux RSS audio) et vidéo (flux RSS vidéo)
Disponible par abonnementDisponible par abonnement
http://fr.wikipedia.org/wiki/RSS_(formathttp://fr.wikipedia.org/wiki/RSS_(format))
http://cyber.law.harvard.edu/rss/rss.htmlhttp://cyber.law.harvard.edu/rss/rss.html
RSSRSS
* RDF : Resource Description Framework à la base du Web sémantique
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Contenu entre les balises <rss>, métadonnées entre les balises <channel>, <title> : le titreContenu entre les balises <rss>, métadonnées entre les balises <channel>, <title> : le titre
de l'item , <description> : description de l'item, <link> : l'URL du site associé à l'itemde l'item , <description> : description de l'item, <link> : l'URL du site associé à l'item
<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><rss version="2.0">
<channel><channel>
<title>Fil RSS (créé avec Rome)</title><title>Fil RSS (créé avec Rome)</title>
<link>http://rome.dev.java.net</link><link>http://rome.dev.java.net</link>
<description>Ce fil RSS a été créé avec Rome (utilitaire Java de syndication RSS)</description><description>Ce fil RSS a été créé avec Rome (utilitaire Java de syndication RSS)</description>
<item><item>
<title>Le Bic - Prédictions des marées pour 7 jours</title><title>Le Bic - Prédictions des marées pour 7 jours</title>
<link>http://www.marees.gc.ca/cgi-bin/tide-shc.cgi?<link>http://www.marees.gc.ca/cgi-bin/tide-shc.cgi?
queryType=showFrameset&amp;zone=2&amp;language=french&amp;region=4&amp;stnnum=2995</link>queryType=showFrameset&amp;zone=2&amp;language=french&amp;region=4&amp;stnnum=2995</link>
<description>Extraction du contenu de la table des marées...</description><description>Extraction du contenu de la table des marées...</description>
</item></item>
<item><item>
<title>Cacouna - Prédictions des marées pour 7 jours</title><title>Cacouna - Prédictions des marées pour 7 jours</title>
......
</item></item>
</channel></channel>
</rss></rss>
RSS 2.0RSS 2.0
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
RSS – baladodiffusionRSS – baladodiffusion
* Source : http://fr.wikipedia.org/wiki/Podcast
La baladodiffusion (podcast) qui est la diffusion de contenu multimédia est basée sur les fluxLa baladodiffusion (podcast) qui est la diffusion de contenu multimédia est basée sur les flux
RSS. Le logiciel de recherche de baladodiffusion télécharge automatiquement le fichierRSS. Le logiciel de recherche de baladodiffusion télécharge automatiquement le fichier
multimédia associé à l'item du flux RSS. Utilisation de la balise <enclosure> :multimédia associé à l'item du flux RSS. Utilisation de la balise <enclosure> :
<enclosure url="http://www.radio.org/balado/exemple.mp3" length="3968800" type="audio/mpeg" /><enclosure url="http://www.radio.org/balado/exemple.mp3" length="3968800" type="audio/mpeg" />
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
ROME : Rss and atOM utilitiEs : une excellente bibliothèque Java en codeROME : Rss and atOM utilitiEs : une excellente bibliothèque Java en code
source libre qui se base sur JDOMsource libre qui se base sur JDOM
Support de toutes les versions de RSS et d'AtomSupport de toutes les versions de RSS et d'Atom
Analyse, génération et conversion de flux RSS d'un format à l'autreAnalyse, génération et conversion de flux RSS d'un format à l'autre
Sorties vers : String, File, java.io.Writer, org.w3c.dom.Document,Sorties vers : String, File, java.io.Writer, org.w3c.dom.Document,
org.jdom.Documentorg.jdom.Document
Entrées depuis : File, java.io.Reader, org.xml.sax.InputSource,Entrées depuis : File, java.io.Reader, org.xml.sax.InputSource,
org.w3c.dom.Document, org.jdom.Document objectorg.w3c.dom.Document, org.jdom.Document object
Un ensemble de modules : iTunes, A9 Open Search, Google Base, etc.Un ensemble de modules : iTunes, A9 Open Search, Google Base, etc.
https://rome.dev.java.net/https://rome.dev.java.net/
ROMEROME
* RDF : Resource Description Framework
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
RSS - Avantages & inconvénientsRSS - Avantages & inconvénients
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
L'information étant rafraîchie régulièrement, l'usager peutL'information étant rafraîchie régulièrement, l'usager peut
manquer une nouvelle importantemanquer une nouvelle importante
Généralement pas d'archivageGénéralement pas d'archivage
Surabondance d'information (infobésité)Surabondance d'information (infobésité)
Accent sur la nouveauté, pas sur l'analyse et la réflexionAccent sur la nouveauté, pas sur l'analyse et la réflexion
La licence RSS 2.0 appartient à la faculté de droit de l'UniversitéLa licence RSS 2.0 appartient à la faculté de droit de l'Université
HarvardHarvard
RSS - InconvénientsRSS - Inconvénients
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Usager : permet d'être informé d'un contenu sans aller leUsager : permet d'être informé d'un contenu sans aller le
consulterconsulter
Diffuseur: attirer des visiteurs, syndiquer (partager desDiffuseur: attirer des visiteurs, syndiquer (partager des
contenus), recyclage/réutillisation des contenuscontenus), recyclage/réutillisation des contenus
Bon pour la veille, pour suivre l'actualité ou tenir informer desBon pour la veille, pour suivre l'actualité ou tenir informer des
nouveautésnouveautés
Grâce aux CSS, l'apparence peut être personnaliséeGrâce aux CSS, l'apparence peut être personnalisée
Réutiliser le contenu issu d'un autre site tout en personnalisant laRéutiliser le contenu issu d'un autre site tout en personnalisant la
présentationprésentation
RSS - AvantagesRSS - Avantages
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
AtomAtom
AtomAtom
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Atom est un format de syndication créé en 2003 pour combiner laAtom est un format de syndication créé en 2003 pour combiner la
simplicité de RSS 2.0 (i.e. non basé sur RDF) mais en conservantsimplicité de RSS 2.0 (i.e. non basé sur RDF) mais en conservant
certains aspects de RSS 1.0 comme l'espace de nommagecertains aspects de RSS 1.0 comme l'espace de nommage
Norme non propriétaire accrédité par l'IETF (Internet EngineeringNorme non propriétaire accrédité par l'IETF (Internet Engineering
Task Force)Task Force)
Créée en réaction au format RSS 2.0 qui appartient à la faculté deCréée en réaction au format RSS 2.0 qui appartient à la faculté de
droit de l'Université Harvarddroit de l'Université Harvard
Atom 0.3 est plus répandu mais la dernière version est Atom 1.0Atom 0.3 est plus répandu mais la dernière version est Atom 1.0
Atom sert d'API standard pour les blogues (Atom PublishingAtom sert d'API standard pour les blogues (Atom Publishing
Protocol)Protocol)
Choisi par Google pour BloggerChoisi par Google pour Blogger
Propose un API REST (Atom Publishing Protocol)Propose un API REST (Atom Publishing Protocol)
http://tools.ietf.org/html/rfc4287http://tools.ietf.org/html/rfc4287
AtomAtom
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" version="0.3"><feed xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" version="0.3">
<title>Sample Feed (created with Rome)</title><title>Sample Feed (created with Rome)</title>
<link rel="alternate" href="http://rome.dev.java.net" /><link rel="alternate" href="http://rome.dev.java.net" />
<tagline>This feed has been created using Rome (Java syndication utilities</tagline><tagline>This feed has been created using Rome (Java syndication utilities</tagline>
<entry><entry>
<title>Rome v1.0</title><title>Rome v1.0</title>
<link rel="alternate" href="http://wiki.java.net/bin/view/Javawsxml/Rome01" /><link rel="alternate" href="http://wiki.java.net/bin/view/Javawsxml/Rome01" />
<author><author>
<name /><name />
</author></author>
<modified>2004-06-08T04:00:00Z</modified><modified>2004-06-08T04:00:00Z</modified>
<issued>2004-06-08T04:00:00Z</issued><issued>2004-06-08T04:00:00Z</issued>
<summary type="text/plain" mode="escaped">Initial release of Rome</summary><summary type="text/plain" mode="escaped">Initial release of Rome</summary>
<dc:date>2004-06-08T04:00:00Z</dc:date><dc:date>2004-06-08T04:00:00Z</dc:date>
</entry></entry>
......
</feed></feed>
Atom – Exemple de flux AtomAtom – Exemple de flux Atom
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
RESTREST
RESTREST
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Pour des raisons de sécurité, un script JavaScript* provenant d'une pagePour des raisons de sécurité, un script JavaScript* provenant d'une page
donnée n'a accès qu'à des objets JavaScript qui sont issus du mêmedonnée n'a accès qu'à des objets JavaScript qui sont issus du même
domaine que la page d'origine.domaine que la page d'origine.
La fameuse « Same Origin Policy » apparue avec Netscape 2 en 1996La fameuse « Same Origin Policy » apparue avec Netscape 2 en 1996
L'idée est d'empêcher qu'un script malicieux ait accès à de l'informationL'idée est d'empêcher qu'un script malicieux ait accès à de l'information
confidentielle contenue dans une autre pageconfidentielle contenue dans une autre page
Il est cependant possible d'accéder à un domaine apparentéIl est cependant possible d'accéder à un domaine apparenté
Par exemple, soit l'URL d'origine :Par exemple, soit l'URL d'origine : http://www.abc.com/dir/page.htmlhttp://www.abc.com/dir/page.html
Contrainte de sécurité SOPContrainte de sécurité SOP
http://www.abc.com/dir2/page2.html autorisé même domaine
https://www.abc.com/dir2/page2.html refusé protocole différent
http://www.abc.com:81/dir2/page2.html refusé port différent
http://www.abc.com/dir2/dir3/page3.html autorisé même domaine
http://abc.com/dir/page2.html refusé domaine différent
* Note : qui roule dans un bac de sable (sandbox)* Note : qui roule dans un bac de sable (sandbox)
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Les applications Web centrées client requièrent un accès élargi auxLes applications Web centrées client requièrent un accès élargi aux
services hébergés sur d'autres serveursservices hébergés sur d'autres serveurs
Script signéScript signé
« couche proxy » sur le serveur, puisque le serveur n'a pas les« couche proxy » sur le serveur, puisque le serveur n'a pas les
contraintes de sécurité du fureteurcontraintes de sécurité du fureteur
Le fureteur n'applique pas la règle SOP à toutes les ressources d'une pageLe fureteur n'applique pas la règle SOP à toutes les ressources d'une page
Web. Par exemple, une balise <img...> peut référer à une URL dans unWeb. Par exemple, une balise <img...> peut référer à une URL dans un
autre domaine.autre domaine.
On peut aussi contourner la règle de sécurité SOP en prenant avantageOn peut aussi contourner la règle de sécurité SOP en prenant avantage
de la balise <script>. Une balise <script> peut référer à un code qui estde la balise <script>. Une balise <script> peut référer à un code qui est
sur une autre page. Cependant, il faut pouvoir faire confiance à ce script.sur une autre page. Cependant, il faut pouvoir faire confiance à ce script.
Contournement de la règle SOPContournement de la règle SOP
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
RESTREST
REST (REpresentational State Transfer)REST (REpresentational State Transfer)
Repose sur la notion de ressourcesRepose sur la notion de ressources
Pas de gestion d'état (stateless)Pas de gestion d'état (stateless)
Chaque ressource est accessible via une URI uniqueChaque ressource est accessible via une URI unique
Chaque ressource répond à un ensemble de commandes HTTP de baseChaque ressource répond à un ensemble de commandes HTTP de base
qui correspondent aux opéations classiques dites CRUDqui correspondent aux opéations classiques dites CRUD
Un ensemble de types de contenus MIME en requête et en réponseUn ensemble de types de contenus MIME en requête et en réponse
– HTTP CRUD Opération
POSTPOST CREATECREATE créationcréation
GETGET READREAD lecturelecture
PUTPUT UPDATEUPDATE mise à jourmise à jour
DELETEDELETE DELETEDELETE suppressionsuppression
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Projet JAX-RS (JSR-311)Projet JAX-RS (JSR-311)
http://cwiki.apache.org/CXF20DOC/jax-rs-jsr-311.htmlhttp://cwiki.apache.org/CXF20DOC/jax-rs-jsr-311.html
Un outil à base d'annotations pour créer des services RESTUn outil à base d'annotations pour créer des services REST
@Path("/commande")@Path("/commande")
public class PriseCommandeService {public class PriseCommandeService {
@GET@GET
@Path(“/{id}”)@Path(“/{id}”)
public String getCommande()@PathParam(“id”) int commandeId {public String getCommande()@PathParam(“id”) int commandeId {
// corps de la méthode// corps de la méthode
}}
}}
En furetant à l'addresse hypothétique http://www.abc.com/commande/123 JAX-RSEn furetant à l'addresse hypothétique http://www.abc.com/commande/123 JAX-RS
va faire une requête HTTP à la méthode getCommande() et va recevoir le contenuva faire une requête HTTP à la méthode getCommande() et va recevoir le contenu
retourné par la méthode getCommande()retourné par la méthode getCommande()
REST –REST – Quelques outils et ressourcesQuelques outils et ressources
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Projet Restlet – bonne bibliothèque REST avec une intégration à GWTProjet Restlet – bonne bibliothèque REST avec une intégration à GWT
http://www.restlet.org/about/http://www.restlet.org/about/
Restlet First steps (tutoriel)Restlet First steps (tutoriel)
http://www.restlet.org/documentation/1.1/firstStepshttp://www.restlet.org/documentation/1.1/firstSteps
Restlet-GWT moduleRestlet-GWT module
http://wiki.restlet.org/docs_1.1/13-restlet/28-restlet/144-restlet.htmlhttp://wiki.restlet.org/docs_1.1/13-restlet/28-restlet/144-restlet.html
REST –REST – Projet RestletProjet Restlet
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Introduction to REST (article JavaLobby)Introduction to REST (article JavaLobby)
http://java.dzone.com/articles/intro-resthttp://java.dzone.com/articles/intro-rest
http://java.dzone.com/articles/putting-java-resthttp://java.dzone.com/articles/putting-java-rest
LivreLivre
RESTful Web ServicesRESTful Web Services
Leonard Richardson; Sam RubyLeonard Richardson; Sam Ruby
O'Reilly Media, Inc.O'Reilly Media, Inc.
8 mai, 20078 mai, 2007
REST –REST – Quelques outils et ressourcesQuelques outils et ressources
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
REST - Avantages & inconvénientsREST - Avantages & inconvénients
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
REST est de plus en plus populaireREST est de plus en plus populaire
Les grands sites Web 2.0 comme Amazon, Yahoo!, Flickr offrent desLes grands sites Web 2.0 comme Amazon, Yahoo!, Flickr offrent des
services REST en plus des services SOAP traditionnelsservices REST en plus des services SOAP traditionnels
REST est bien intégré au canevas d'applications Ruby On Rails (RoR)REST est bien intégré au canevas d'applications Ruby On Rails (RoR)
REST - AvantagesREST - Avantages
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Pas conçu pour les transactionsPas conçu pour les transactions
Pas conçu pour les protocoles avec étatsPas conçu pour les protocoles avec états
REST - InconvénientsREST - Inconvénients
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Google GearsGoogle Gears
GearsGears
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Google GearsGoogle Gears
L'usage des cookies pour la persistance est assez limitéL'usage des cookies pour la persistance est assez limité
Google Gears est un plugiciel (extension) du fureteurGoogle Gears est un plugiciel (extension) du fureteur
qui permet de mémoriser de plus grandes quantités dequi permet de mémoriser de plus grandes quantités de
données sur le poste clientdonnées sur le poste client
Gears fournit une base de données SQLGears fournit une base de données SQL
Pour FireFox 1.5 + et IE 6+Pour FireFox 1.5 + et IE 6+
http://gears.google.com/http://gears.google.com/
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
Google Gears – un peu de codeGoogle Gears – un peu de code
public void save() throws StorageException {public void save() throws StorageException {
// Vérifier que Google Gears est installé// Vérifier que Google Gears est installé
if( ! IsGearsInstalled() ) throw new StorageException("Echec sauvegarde, Gears pas installé");if( ! IsGearsInstalled() ) throw new StorageException("Echec sauvegarde, Gears pas installé");
try {try { // Créer la table maBDGears si elle n'existe pas// Créer la table maBDGears si elle n'existe pas
Database db = new Database("maBdGears");Database db = new Database("maBdGears");
db.execute("create table if not exists maBdGears (key varchar(255), value text)");db.execute("create table if not exists maBdGears (key varchar(255), value text)");
// Sauvegarder la liste de valeurs contenues dans la Map getValues() dans la table// Sauvegarder la liste de valeurs contenues dans la Map getValues() dans la table
for(Iterator iter=getValues().entrySet().iterator(); iter.hasNext(); ){for(Iterator iter=getValues().entrySet().iterator(); iter.hasNext(); ){
Entry entry = (Entry) iter.next();Entry entry = (Entry) iter.next();
db.execute("insert into maBdGears values (?, ?)", new String[] {db.execute("insert into maBdGears values (?, ?)", new String[] {
(String) entry.getKey(), (String) entry.getValue()(String) entry.getKey(), (String) entry.getValue()
});});
}}
}}
catch (GearsException e) { throw new StorageException( "Echec sauvegarde", e );catch (GearsException e) { throw new StorageException( "Echec sauvegarde", e );
}}
}}
* Source : R. Dewsbury 2008 – Chap.6, p. 306-307* Source : R. Dewsbury 2008 – Chap.6, p. 306-307
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
COMETCOMET
Le terme COMET a été inventé par Alex
Russell en mars 2006 en référence à la
poudre à récurer Comet concurrente de la
marque Ajax!
Source : A. Russell - http://alex.dojotoolkit.org/2006/03/comet-low-latency-data-for-the-browser/
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
COMETCOMET
COMETCOMET
* Source Clipart : http://www.clipart.com
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
COMETCOMET
Comet est une architecture d'applications Web qui permet à un serveurComet est une architecture d'applications Web qui permet à un serveur
d'envoyer des données à un client (fureteur) sans attendre une requêted'envoyer des données à un client (fureteur) sans attendre une requête
expliciteexplicite
On parle aussi de « Server-Push » ou de communication à faible latenceOn parle aussi de « Server-Push » ou de communication à faible latence
(« Low-Latency Data Transfer »)(« Low-Latency Data Transfer »)
Personnellement j'aime bien le terme de « communication continue etPersonnellement j'aime bien le terme de « communication continue et
instantanée »instantanée »
D'ailleurs les principales applications actuelles tournent autour de laD'ailleurs les principales applications actuelles tournent autour de la
messagerie instantanée comme Gtalk ou Meebo (messagerie instantanée comme Gtalk ou Meebo (
http://mail.google.com/mail/help/chat.htmlhttp://mail.google.com/mail/help/chat.html,, www.meebo.comwww.meebo.com ) la) la
télésurveillance et le travail collaboratif (multiusagers) en temps réeltélésurveillance et le travail collaboratif (multiusagers) en temps réel
Comet repose sur un protocole à base d'événementsComet repose sur un protocole à base d'événements
Une architecture à base d'événement ou de messages existe déjà dans lesUne architecture à base d'événement ou de messages existe déjà dans les
architectures SOAarchitectures SOA
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
COMETCOMET
Une application Comet
peut transmettre des
données au client à
n'importe quel moment
(pas seulement en réponse
à une requête de l'usager).
Les données sont
transmises au travers une
unique connection
précédemment ouverte.
Le temps de latence est
ainsi minimisé.
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
COMET – défi techniqueCOMET – défi technique
Comet requiert un protocole à base d'événements et une réaction instantanéeComet requiert un protocole à base d'événements et une réaction instantanée
Peut se faire avec des sockets TCP/IP (=> plugiciels)Peut se faire avec des sockets TCP/IP (=> plugiciels)
HTTP ne supporte pas la diffusion spontanée d'événements. HTTP répondHTTP ne supporte pas la diffusion spontanée d'événements. HTTP répond
seulement en réaction à une requête d'un client. Un serveur HTTP n'envoie pas deseulement en réaction à une requête d'un client. Un serveur HTTP n'envoie pas de
données sans une requêtedonnées sans une requête
Une autre technique est le Polling qui consiste à faire des requêtes au serveur àUne autre technique est le Polling qui consiste à faire des requêtes au serveur à
intervalles réguliers. En réduisant l'intervalle on réduit la latence.intervalles réguliers. En réduisant l'intervalle on réduit la latence.
Chaque client en attente d'un événement bloque un Thread sur le serveur (1Chaque client en attente d'un événement bloque un Thread sur le serveur (1
connexion = 1 Thread). Or un conteneur de servlets peut servir un maximum deconnexion = 1 Thread). Or un conteneur de servlets peut servir un maximum de
Threads concurrents de l'ordre de 100 à 200. Au delà il faut un autre mécanismeThreads concurrents de l'ordre de 100 à 200. Au delà il faut un autre mécanisme
Apache Tomcat version 6+ supporte l'interface CometProcessor avec ses servletsApache Tomcat version 6+ supporte l'interface CometProcessor avec ses servlets
qui permet le partage d'un Thread par plusieurs connexions.qui permet le partage d'un Thread par plusieurs connexions.
Le support du Server Push est incorporé dans la spécification Servlet 3.0. et lesLe support du Server Push est incorporé dans la spécification Servlet 3.0. et les
conteneurs de servlet JEE6conteneurs de servlet JEE6 http://jcp.org/en/jsr/detail?id=315http://jcp.org/en/jsr/detail?id=315
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
COMET & GWTCOMET & GWT
Comet with GWTComet with GWT
http://code.google.com/p/google-web-toolkit-incubator/wiki/ServerPushFAQhttp://code.google.com/p/google-web-toolkit-incubator/wiki/ServerPushFAQ
Rocket-GWT RemotingRocket-GWT Remoting
http://code.google.com/p/rocket-gwt/wiki/Comethttp://code.google.com/p/rocket-gwt/wiki/Comet
Une autre solutionUne autre solution
http://groups.google.com/group/Google-Webhttp://groups.google.com/group/Google-Web
Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780
QuestionsQuestions
??
* Source Clipart : http://www.clipart.com

Mais conteúdo relacionado

Semelhante a Normes avancées du Web - GTI780 & MTI780 - ETS - A08

Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Jean-Laurent de Morlhon
 
Wpl53 g formation-developper-des-applications-pour-ibm-websphere-portal-8-0-a...
Wpl53 g formation-developper-des-applications-pour-ibm-websphere-portal-8-0-a...Wpl53 g formation-developper-des-applications-pour-ibm-websphere-portal-8-0-a...
Wpl53 g formation-developper-des-applications-pour-ibm-websphere-portal-8-0-a...
CERTyou Formation
 
Ajax intro 2pp
Ajax intro 2ppAjax intro 2pp
Ajax intro 2pp
RYMAA
 
WebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet ApplicationsWebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet Applications
Vincent Perrin
 
Portails Etat De L'art
Portails  Etat De L'artPortails  Etat De L'art
Portails Etat De L'art
Tugdual Grall
 

Semelhante a Normes avancées du Web - GTI780 & MTI780 - ETS - A08 (20)

Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
 
Tendances Futures du Web - GTI780 & MTI780 - ETS - A09
Tendances Futures du Web - GTI780 & MTI780 - ETS - A09Tendances Futures du Web - GTI780 & MTI780 - ETS - A09
Tendances Futures du Web - GTI780 & MTI780 - ETS - A09
 
Resource Oriented Architecture
Resource Oriented ArchitectureResource Oriented Architecture
Resource Oriented Architecture
 
GWT Approfondissement - GTI780 & MTI780 - ETS - A09
GWT Approfondissement  - GTI780 & MTI780 - ETS - A09GWT Approfondissement  - GTI780 & MTI780 - ETS - A09
GWT Approfondissement - GTI780 & MTI780 - ETS - A09
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)
 
Introduction à GWT - GTI780 & MTI780 - ETS - A09
Introduction à GWT - GTI780 & MTI780 - ETS - A09Introduction à GWT - GTI780 & MTI780 - ETS - A09
Introduction à GWT - GTI780 & MTI780 - ETS - A09
 
Wpl53 g formation-developper-des-applications-pour-ibm-websphere-portal-8-0-a...
Wpl53 g formation-developper-des-applications-pour-ibm-websphere-portal-8-0-a...Wpl53 g formation-developper-des-applications-pour-ibm-websphere-portal-8-0-a...
Wpl53 g formation-developper-des-applications-pour-ibm-websphere-portal-8-0-a...
 
Ajax intro 2pp
Ajax intro 2ppAjax intro 2pp
Ajax intro 2pp
 
Introduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINEIntroduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINE
 
ACube : De la solution à l'industrialisation
ACube : De la solution à l'industrialisationACube : De la solution à l'industrialisation
ACube : De la solution à l'industrialisation
 
WebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet ApplicationsWebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet Applications
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJS
 
GtugDakar AppEngine, Gwt
GtugDakar AppEngine, GwtGtugDakar AppEngine, Gwt
GtugDakar AppEngine, Gwt
 
Web 2.0 GTI780 & MTI780 ETS A09
Web 2.0  GTI780 & MTI780  ETS  A09Web 2.0  GTI780 & MTI780  ETS  A09
Web 2.0 GTI780 & MTI780 ETS A09
 
Web 2.0 - GTI780 & MTI780 - ETS - A08
Web 2.0 - GTI780 & MTI780 - ETS - A08Web 2.0 - GTI780 & MTI780 - ETS - A08
Web 2.0 - GTI780 & MTI780 - ETS - A08
 
Portails Etat De L'art
Portails  Etat De L'artPortails  Etat De L'art
Portails Etat De L'art
 
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
 
Quoi de neuf dans ASP.NET 4.5
Quoi de neuf dans ASP.NET 4.5Quoi de neuf dans ASP.NET 4.5
Quoi de neuf dans ASP.NET 4.5
 
Continuous cloud costs testing [Fr] - DevoxxFR - 2013-03
Continuous cloud costs testing [Fr] - DevoxxFR - 2013-03Continuous cloud costs testing [Fr] - DevoxxFR - 2013-03
Continuous cloud costs testing [Fr] - DevoxxFR - 2013-03
 
Introduction à GWT - GTI780 & MTI780 - ETS - A08
Introduction à GWT - GTI780 & MTI780 - ETS - A08Introduction à GWT - GTI780 & MTI780 - ETS - A08
Introduction à GWT - GTI780 & MTI780 - ETS - A08
 

Mais de Claude Coulombe

Infonuagique retour d'expérience
 Infonuagique   retour d'expérience Infonuagique   retour d'expérience
Infonuagique retour d'expérience
Claude Coulombe
 
L'infonuagique éducative – Promesses et Défis! - Colloque tice 04mai2012
L'infonuagique éducative – Promesses et Défis! - Colloque tice 04mai2012L'infonuagique éducative – Promesses et Défis! - Colloque tice 04mai2012
L'infonuagique éducative – Promesses et Défis! - Colloque tice 04mai2012
Claude Coulombe
 

Mais de Claude Coulombe (19)

Plates formes CLOM - importance des normes ouvertes et du logiciel libre
Plates formes CLOM - importance des normes ouvertes et du logiciel librePlates formes CLOM - importance des normes ouvertes et du logiciel libre
Plates formes CLOM - importance des normes ouvertes et du logiciel libre
 
Augmenter la persévérance dans les CLOM / MOOC? Possible!
Augmenter la persévérance dans les CLOM / MOOC? Possible!Augmenter la persévérance dans les CLOM / MOOC? Possible!
Augmenter la persévérance dans les CLOM / MOOC? Possible!
 
Séminaire polytechnique 12nov15
Séminaire polytechnique 12nov15Séminaire polytechnique 12nov15
Séminaire polytechnique 12nov15
 
Clom portfolios - ACFAS 2013
Clom portfolios - ACFAS 2013Clom portfolios - ACFAS 2013
Clom portfolios - ACFAS 2013
 
De nouvelles plateformes technologiques pour les CLOM
De nouvelles plateformes technologiques pour les CLOMDe nouvelles plateformes technologiques pour les CLOM
De nouvelles plateformes technologiques pour les CLOM
 
Infonuagique retour d'expérience
 Infonuagique   retour d'expérience Infonuagique   retour d'expérience
Infonuagique retour d'expérience
 
De nouvelles plateformes technologiques pour les CLOM / MOOCs
De nouvelles plateformes technologiques pour les CLOM / MOOCsDe nouvelles plateformes technologiques pour les CLOM / MOOCs
De nouvelles plateformes technologiques pour les CLOM / MOOCs
 
GWT, quoi de neuf? Présentation au GDG/GTUG Montréal - 26 juin 2013
GWT, quoi de neuf?  Présentation au GDG/GTUG Montréal - 26 juin 2013GWT, quoi de neuf?  Présentation au GDG/GTUG Montréal - 26 juin 2013
GWT, quoi de neuf? Présentation au GDG/GTUG Montréal - 26 juin 2013
 
L'infonuagique éducative – Promesses et Défis! - Colloque tice 04mai2012
L'infonuagique éducative – Promesses et Défis! - Colloque tice 04mai2012L'infonuagique éducative – Promesses et Défis! - Colloque tice 04mai2012
L'infonuagique éducative – Promesses et Défis! - Colloque tice 04mai2012
 
Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011
 
Gwt intro-101
Gwt intro-101Gwt intro-101
Gwt intro-101
 
Web social - GTI780 & MTI780 - ETS - A09
Web social - GTI780 & MTI780 - ETS - A09Web social - GTI780 & MTI780 - ETS - A09
Web social - GTI780 & MTI780 - ETS - A09
 
jQuery GTI780 & MTI780 ETS A09
jQuery   GTI780 & MTI780   ETS   A09jQuery   GTI780 & MTI780   ETS   A09
jQuery GTI780 & MTI780 ETS A09
 
Normes de base du Web GTI780 & MTI780 ETS A09
Normes de base du Web  GTI780 & MTI780  ETS   A09Normes de base du Web  GTI780 & MTI780  ETS   A09
Normes de base du Web GTI780 & MTI780 ETS A09
 
Mcetech 2009 - Open Social
Mcetech 2009 - Open SocialMcetech 2009 - Open Social
Mcetech 2009 - Open Social
 
Web social - GTI780 & MTI780 - ETS - A08
Web social - GTI780 & MTI780 - ETS - A08Web social - GTI780 & MTI780 - ETS - A08
Web social - GTI780 & MTI780 - ETS - A08
 
GWT Approfondissement - GTI780 & MTI780 - ETS - A08
GWT Approfondissement - GTI780 & MTI780 - ETS - A08GWT Approfondissement - GTI780 & MTI780 - ETS - A08
GWT Approfondissement - GTI780 & MTI780 - ETS - A08
 
Normes de base du Web - GTI780 & MTI780 - ETS - A08
Normes de base du Web - GTI780 & MTI780 - ETS - A08Normes de base du Web - GTI780 & MTI780 - ETS - A08
Normes de base du Web - GTI780 & MTI780 - ETS - A08
 
jQuery - GTI780 & MTI780 - ETS - A08
jQuery - GTI780 & MTI780 - ETS - A08jQuery - GTI780 & MTI780 - ETS - A08
jQuery - GTI780 & MTI780 - ETS - A08
 

Normes avancées du Web - GTI780 & MTI780 - ETS - A08

  • 1. Normes avancées du WebNormes avancées du Web Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Sujets spéciaux en TI Le Web 2.0 : concepts et outils École de technologie supérieure par Claude Coulombe
  • 2. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Normes avancées du WebNormes avancées du Web * Source Clipart : http://www.clipart.com
  • 3. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780  AjaxAjax  Architecture SOAArchitecture SOA  XSL - XSLTXSL - XSLT  JSONJSON  RSS 2.0RSS 2.0  Atom 0.3 et 1.0Atom 0.3 et 1.0  RESTREST  Google GearsGoogle Gears  CometComet Normes avancées du WebNormes avancées du Web
  • 4. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Améliorer l'expérience-utilisateur par des interfaces riches et réactivesAméliorer l'expérience-utilisateur par des interfaces riches et réactives Répondre aux besoins des architectures distribuéesRépondre aux besoins des architectures distribuées Implémenter les architectures à base de services WebImplémenter les architectures à base de services Web Assurer la compatibilité entre les différents fureteurs et les différentesAssurer la compatibilité entre les différents fureteurs et les différentes technologies serveurstechnologies serveurs Obtenir de l'information à la carte et des interfaces riches en contenuObtenir de l'information à la carte et des interfaces riches en contenu Faciliter la réutilisation, le partage (syndication) et la transformation desFaciliter la réutilisation, le partage (syndication) et la transformation des donnéesdonnées Pourquoi de nouvelles normes?Pourquoi de nouvelles normes?
  • 5. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 AjaxAjax AjaxAjax * Source Clipart : http://www.clipart.com
  • 6. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 AjaxAjax – Une véritable percée!– Une véritable percée! AJAXAJAX Le premier à utiliser le terme AJAX fut Jesse James Garrett en février 2005 * Source Clipart : http://www.clipart.com
  • 7. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780  Ajax (Asynchronous JavaScript & XML)Ajax (Asynchronous JavaScript & XML)  Fini le pénible rechargement de pages!Fini le pénible rechargement de pages!  Réalise des requêtes asynchrones au serveurRéalise des requêtes asynchrones au serveur et fait la mise-à-jour de la page Web sans faireet fait la mise-à-jour de la page Web sans faire de chargement completde chargement complet  Applications Web plus réactives et plusApplications Web plus réactives et plus dynamiquesdynamiques  Objet XMLHttpRequest inventé par M$Objet XMLHttpRequest inventé par M$  Basé sur du code-client en JavaScriptBasé sur du code-client en JavaScript AjaxAjax – Une véritable percée!– Une véritable percée!
  • 8. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Ajax –Ajax – Diagramme de collaborationDiagramme de collaboration Source : J.J. Garrett 2005 - http://www.adaptivepath.com/ideas/essays/archives/000385.php
  • 9. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Ajax – Diagramme de séquenceAjax – Diagramme de séquence Source : J.J. Garrett 2005 - http://www.adaptivepath.com/ideas/essays/archives/000385.php En mode asynchrone, l'exécution dans le fureteur sur le poste client se poursuit sans attendre la réponse du serveur. La réponse sera traitée par une fonction de retour (fonction Callback) quand elle arrivera. L'état de la requête est donné par l'attribut readyState de l'objet XMLHttpRequest. En mode synchrone, le fureteur est gelé en attendant la réponse du serveur.
  • 10. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Ajax - Avantages & inconvénientsAjax - Avantages & inconvénients * Source Clipart : http://www.clipart.com
  • 11. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Ajax - InconvénientsAjax - Inconvénients  Effet « buzzword »Effet « buzzword »  Problèmes de compatibilité entre les différents fureteursProblèmes de compatibilité entre les différents fureteurs  Ne fonctionne pas si JavaScript est désactivéNe fonctionne pas si JavaScript est désactivé  Les données chargées de façon dynamique ne sont pasLes données chargées de façon dynamique ne sont pas indexées par les moteurs de rechercheindexées par les moteurs de recherche  Si le traitement du côté serveur est long, le traitementSi le traitement du côté serveur est long, le traitement asynchrone d'Ajax fait que les changements se font avec unasynchrone d'Ajax fait que les changements se font avec un délaidélai  Le bouton de retour en arrière, l'URL ne change pas et lesLe bouton de retour en arrière, l'URL ne change pas et les signets ne fonctionnent passignets ne fonctionnent pas  Pas d'accès* en dehors du domaine du serveurPas d'accès* en dehors du domaine du serveur  Plus exigeant sur le poste client (vieux PC ?)Plus exigeant sur le poste client (vieux PC ?) * Note : En anglais « Same Origin Policy »
  • 12. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Ajax - AvantagesAjax - Avantages  Réponses rapides aux actions de l'utilisateurRéponses rapides aux actions de l'utilisateur  Applications Web riches, rapides et légèresApplications Web riches, rapides et légères  Pas de long téléchargement, ni d'installationPas de long téléchargement, ni d'installation  Permet de modifier partiellement la page affichée par lePermet de modifier partiellement la page affichée par le fureteur pour la mettre à jour sans avoir à recharger la pagefureteur pour la mettre à jour sans avoir à recharger la page entière.entière.  Réduit la quantité d'information demandée au serveurRéduit la quantité d'information demandée au serveur  Fait davantage de traitement du côté client (en JavaScript)Fait davantage de traitement du côté client (en JavaScript) et moins sur le serveur et le réseauet moins sur le serveur et le réseau  Donc économie du serveur et de la bande passanteDonc économie du serveur et de la bande passante
  • 13. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Architecture SOAArchitecture SOA SOASOA * Source Clipart : http://www.clipart.com
  • 14. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 SOA (Service Oriented Architecture) Architecture orientée servicesSOA (Service Oriented Architecture) Architecture orientée services Basée sur les services Web (WS) et les composants logicielsBasée sur les services Web (WS) et les composants logiciels Reprend les concepts du calcul distribuéReprend les concepts du calcul distribué Un service établit une relation entre un composant producteur et unUn service établit une relation entre un composant producteur et un composant consommateurcomposant consommateur Application : ensemble de services qui communiquent par des messagesApplication : ensemble de services qui communiquent par des messages Utilisation de messages « en format ouvert » le plus souvent en XMLUtilisation de messages « en format ouvert » le plus souvent en XML Possibilité d'activation par des événements*Possibilité d'activation par des événements* Régie selon des contrats d'échangeRégie selon des contrats d'échange Souvent définie en termes de couches applicativesSouvent définie en termes de couches applicatives Service synchrone ou asynchroneService synchrone ou asynchrone Populaire dans le e-commerce (B2B et B2C)Populaire dans le e-commerce (B2B et B2C) Plateformes JEE et .NETPlateformes JEE et .NET Architecture SOAArchitecture SOA * Note : une évolution intéressante!
  • 15. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 L'annuaire des services référence tous les servicesL'annuaire des services référence tous les services Le bus a un rôle d'intermédiaire entre le producteur et le consommateur du serviceLe bus a un rôle d'intermédiaire entre le producteur et le consommateur du service Un service peut implémenter plusieurs interfacesUn service peut implémenter plusieurs interfaces Un service doit respecter un contrat (ou règles de fonctionnement)Un service doit respecter un contrat (ou règles de fonctionnement) Architecture SOAArchitecture SOA * Source : Wikipedia & Dirk Krafzig, Karl Banke, and Dirk Slama. Enterprise SOA. Prentice Hall, 2005 SOA Interface d'application Service Annuaire des services Bus de service ImplémentationContrat Interface Logique d'affaire Données
  • 16. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Origine : protocole de communication entre objets distribués ORB (ObjectOrigine : protocole de communication entre objets distribués ORB (Object Request Broker) comme CORBA*, DCOM et RMI (format propriétaireRequest Broker) comme CORBA*, DCOM et RMI (format propriétaire binaire, lourdeur, complexité).binaire, lourdeur, complexité). Idée : HTTP et XMLIdée : HTTP et XML XML-RPC, un protocole de service web simple, précurseur de SOAP, quiXML-RPC, un protocole de service web simple, précurseur de SOAP, qui est à la base de plusieurs APIs pour les services de bloguesest à la base de plusieurs APIs pour les services de blogues SOAP (Simple Object Access Protocol) avec WSDL (Web ServicesSOAP (Simple Object Access Protocol) avec WSDL (Web Services Description language), invocation du service selon le protocole SOAPDescription language), invocation du service selon le protocole SOAP SOAP est passé de simple à complexe par l'effet combiné d'une tendanceSOAP est passé de simple à complexe par l'effet combiné d'une tendance à concevoir pour résoudre tous les problèmes (over-engineered) et de laà concevoir pour résoudre tous les problèmes (over-engineered) et de la conception par comité.conception par comité. RPC (Remote Procedure Call) est basé sur l'échange d'objets entre leRPC (Remote Procedure Call) est basé sur l'échange d'objets entre le client et le serveurclient et le serveur REST retour aux sources...REST retour aux sources... Services WebServices Web * Note : CORBA est un bel exemple de conception par comité
  • 17. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 SOA - Avantages & inconvénientsSOA - Avantages & inconvénients * Source Clipart : http://www.clipart.com
  • 18. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 « Phénomène de mode »« Phénomène de mode » Tendance à la multiplication des couches et des messagesTendance à la multiplication des couches et des messages Difficile à testerDifficile à tester Problème de coordination ou orchestration entre les divers servicesProblème de coordination ou orchestration entre les divers services Problème de sécuritéProblème de sécurité Problème de réelle interopérabilitéProblème de réelle interopérabilité On constate une certaine lourdeur et de la complexitéOn constate une certaine lourdeur et de la complexité SOAP est lourd et complexeSOAP est lourd et complexe Difficile d'imaginer des communications SOAP directe avec uneDifficile d'imaginer des communications SOAP directe avec une application Web au niveau fureteur (client-centric). Pas de service SOAPapplication Web au niveau fureteur (client-centric). Pas de service SOAP dans un client JavaScriptdans un client JavaScript SOA - InconvénientsSOA - Inconvénients * Note : le plus souvent en XML
  • 19. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Couplage faibleCouplage faible Favorise les échanges entre toutes sortes de logiciels, peu importe leursFavorise les échanges entre toutes sortes de logiciels, peu importe leurs langages de programmationlangages de programmation Favorise la réutilisationFavorise la réutilisation Favorise l'interopérabilitéFavorise l'interopérabilité Favorise une réponse et une adaptation plus rapides des systèmesFavorise une réponse et une adaptation plus rapides des systèmes informatiques aux changements dans l'environnement technologiqueinformatiques aux changements dans l'environnement technologique SOAP offre des possibilités étendues pour le traitement sécuritaire desSOAP offre des possibilités étendues pour le traitement sécuritaire des transactionstransactions SOA ouvre la voie à des architectures Web à base d'événements (EventSOA ouvre la voie à des architectures Web à base d'événements (Event Driven)Driven) SOA - AvantagesSOA - Avantages * Note : le plus souvent en XML
  • 20. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 SOA et Web 2.0 ont beaucoup d'éléments en communSOA et Web 2.0 ont beaucoup d'éléments en commun Vision commune d'un Internet des servicesVision commune d'un Internet des services Répondent à des besoins et des clientèles différentesRépondent à des besoins et des clientèles différentes Il y a beaucoup de potentiel à combiner les technologies et les principesIl y a beaucoup de potentiel à combiner les technologies et les principes du Web 2.0 et de l'architecture SOAdu Web 2.0 et de l'architecture SOA Programmation événementielle ou à base d'événementsProgrammation événementielle ou à base d'événements SOA & Web 2.0SOA & Web 2.0 * Note : le plus souvent en XML
  • 21. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 XSL - XSLTXSL - XSLT XSL / XSLTXSL / XSLT * Source Clipart : http://www.clipart.com
  • 22. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 XSL (eXtensible Stylesheet Language)XSL (eXtensible Stylesheet Language) XSLT (XML Stylesheet Language for Transformations) transforme unXSLT (XML Stylesheet Language for Transformations) transforme un document source balisé (XML) en un second document (généralementdocument source balisé (XML) en un second document (généralement balisé lui-aussi)balisé lui-aussi) Technologies d'extraction et de transformation des donnéesTechnologies d'extraction et de transformation des données Peu valorisées à l'image des bases de données mais essentiellesPeu valorisées à l'image des bases de données mais essentielles Les documents obtenus par Ajax sont souvent trop complexes pour êtreLes documents obtenus par Ajax sont souvent trop complexes pour être traitées « manuellement » à partir de l'API DOMtraitées « manuellement » à partir de l'API DOM Utilisation de l'extraction XPath ou des transformations XSLT pour obtenirUtilisation de l'extraction XPath ou des transformations XSLT pour obtenir des données utilesdes données utiles XSL / XSLTXSL / XSLT
  • 23. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 entreeD1.xmlentreeD1.xml <?xml version="1.0"?><?xml version="1.0"?> <doc>Bonjour XSLT</doc><doc>Bonjour XSLT</doc> D1versD2.xslD1versD2.xsl <?xml version="1.0"?><?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="doc"><xsl:template match="doc"> <out><xsl:value-of select="."/></out><out><xsl:value-of select="."/></out> </xsl:template></xsl:template> </xsl:stylesheet></xsl:stylesheet> sortieD2.xmlsortieD2.xml <?xml version="1.0"?><?xml version="1.0"?> <out>Bonjour XSLT</out><out>Bonjour XSLT</out> XSL / XSLT – Petit eXSL / XSLT – Petit exemple...xemple...
  • 24. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 import javax.xml.transform.*;import javax.xml.transform.*; // Utilisation de l'interface TraX pour réaliser une transformation// Utilisation de l'interface TraX pour réaliser une transformation // de la la manière la plus simple possible, en trois instructions// de la la manière la plus simple possible, en trois instructions public class TransformDOC1versDOC2 {public class TransformDOC1versDOC2 { public static void main(String[] args) throws TransformerException,public static void main(String[] args) throws TransformerException, TransformerConfigurationException, FileNotFoundException, IOException {TransformerConfigurationException, FileNotFoundException, IOException { if (args.length != 3 || args[0].equals("--aide")) {if (args.length != 3 || args[0].equals("--aide")) { System.out.println("java TransformDOC1versDOC2 D1versD2.xsl entreeD1.xml sortieD2.xml");System.out.println("java TransformDOC1versDOC2 D1versD2.xsl entreeD1.xml sortieD2.xml"); return;return; }} TransformerFactory transFact = TransformerFactory.newInstance();TransformerFactory transFact = TransformerFactory.newInstance(); Transformer transformer = transFact.newTransformer(new StreamSource(args[0]));Transformer transformer = transFact.newTransformer(new StreamSource(args[0])); transformer.transform(new StreamSource(args[1]), new StreamResult(new FileOutputStream(args[2])));transformer.transform(new StreamSource(args[1]), new StreamResult(new FileOutputStream(args[2]))); }} }} XSL / XSLT – Un peu de code...XSL / XSLT – Un peu de code...
  • 25. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Du côté serveur : JAXPDu côté serveur : JAXP (Java API for XML Processing)(Java API for XML Processing) Traitement du XML (validation, analyse, transformation) qui regroupe un ensemble d'outils JavaTraitement du XML (validation, analyse, transformation) qui regroupe un ensemble d'outils Java pour le traitement du XML dont l'analyseur (parser) Xerces.pour le traitement du XML dont l'analyseur (parser) Xerces. JAXP regroupe les deux principales interfaces d'analyse (parsage) de documents XML :JAXP regroupe les deux principales interfaces d'analyse (parsage) de documents XML : DOM (Document Object Model) qui construit un arbre en mémoireDOM (Document Object Model) qui construit un arbre en mémoire SAX (Simple API for XML) qui base son analyse sur le déclenchementSAX (Simple API for XML) qui base son analyse sur le déclenchement d'événements (et évocation de fonctions callback)d'événements (et évocation de fonctions callback) API de transformation XSLT qui s'appuie sur le moteur de transformation Xalan.API de transformation XSLT qui s'appuie sur le moteur de transformation Xalan. Depuis Java 5, JAXP est inclus dans le JDK et fait donc partie du langage Java de base.Depuis Java 5, JAXP est inclus dans le JDK et fait donc partie du langage Java de base. Autres ressources serveurs : JDOM, dom4j et StAXAutres ressources serveurs : JDOM, dom4j et StAX Du côté client : la bibliothèque JavaScript Google AjaxSLTDu côté client : la bibliothèque JavaScript Google AjaxSLT http://goog-ajaxslt.sourceforge.net/http://goog-ajaxslt.sourceforge.net/ XSL / XSLT - outilsXSL / XSLT - outils
  • 26. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 JSONJSON JSONJSON * Source Clipart : http://www.clipart.com
  • 27. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 JSON : JavaScript Object NotationJSON : JavaScript Object Notation Notation beaucoup plus compacte que le XMLNotation beaucoup plus compacte que le XML => consomme moins de bande passante=> consomme moins de bande passante Directement interprétable par JavaScriptDirectement interprétable par JavaScript => demande moins de traitement=> demande moins de traitement On assiste au développement d'un ensemble d'outils pour JSON qui sontOn assiste au développement d'un ensemble d'outils pour JSON qui sont directement inspirés de ce qui existe déjà pour XMLdirectement inspirés de ce qui existe déjà pour XML http://www.json.org/json-fr.htmlhttp://www.json.org/json-fr.html JSONJSON
  • 28. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 JavaScript – Notation JSONJavaScript – Notation JSON Un prototype JavaScript en notation JSON commence parUn prototype JavaScript en notation JSON commence par {{ et se termine paret se termine par }}. Il. Il contient un ensemble de couples attribut/valeur non ordonnés. Chaque attribut estcontient un ensemble de couples attribut/valeur non ordonnés. Chaque attribut est suivi desuivi de :: et les couples attribut/valeur sont séparés par une et les couples attribut/valeur sont séparés par une ,, var auto =var auto = {{ fabricantfabricant : ': 'Toyota',Toyota', modele : 'Prius',modele : 'Prius', couleur : 'vert',couleur : 'vert', proprio : {proprio : { nom = 'Lyne';nom = 'Lyne'; }} };};
  • 29. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 RSSRSS RSSRSS * Source Clipart : http://www.clipart.com
  • 30. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Fil, flux ou canal RSS: syndication de contenuFil, flux ou canal RSS: syndication de contenu Inventé chez Netscape en 1999 puis amélioré par Dave WinerInventé chez Netscape en 1999 puis amélioré par Dave Winer RSS : Really Simple Syndication (à l'origine RDF* Site Summary)RSS : Really Simple Syndication (à l'origine RDF* Site Summary) Ajouter facilement des contenus de d'autres sites (syndication)Ajouter facilement des contenus de d'autres sites (syndication) Basé sur le XML, le RSS définit une liste d'items de contenu avec une URLBasé sur le XML, le RSS définit une liste d'items de contenu avec une URL par item accompagnée de métadonnées qui décrivent le contenupar item accompagnée de métadonnées qui décrivent le contenu Utilisé pour du contenu qui change fréquemment (diffusion de nouvelles,Utilisé pour du contenu qui change fréquemment (diffusion de nouvelles, cours de la bourse, météo)cours de la bourse, météo) Afficher les nouveautés d'un blogue (billets récents)Afficher les nouveautés d'un blogue (billets récents) Baladodiffusion audio (flux RSS audio) et vidéo (flux RSS vidéo)Baladodiffusion audio (flux RSS audio) et vidéo (flux RSS vidéo) Disponible par abonnementDisponible par abonnement http://fr.wikipedia.org/wiki/RSS_(formathttp://fr.wikipedia.org/wiki/RSS_(format)) http://cyber.law.harvard.edu/rss/rss.htmlhttp://cyber.law.harvard.edu/rss/rss.html RSSRSS * RDF : Resource Description Framework à la base du Web sémantique
  • 31. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Contenu entre les balises <rss>, métadonnées entre les balises <channel>, <title> : le titreContenu entre les balises <rss>, métadonnées entre les balises <channel>, <title> : le titre de l'item , <description> : description de l'item, <link> : l'URL du site associé à l'itemde l'item , <description> : description de l'item, <link> : l'URL du site associé à l'item <?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"><rss version="2.0"> <channel><channel> <title>Fil RSS (créé avec Rome)</title><title>Fil RSS (créé avec Rome)</title> <link>http://rome.dev.java.net</link><link>http://rome.dev.java.net</link> <description>Ce fil RSS a été créé avec Rome (utilitaire Java de syndication RSS)</description><description>Ce fil RSS a été créé avec Rome (utilitaire Java de syndication RSS)</description> <item><item> <title>Le Bic - Prédictions des marées pour 7 jours</title><title>Le Bic - Prédictions des marées pour 7 jours</title> <link>http://www.marees.gc.ca/cgi-bin/tide-shc.cgi?<link>http://www.marees.gc.ca/cgi-bin/tide-shc.cgi? queryType=showFrameset&amp;zone=2&amp;language=french&amp;region=4&amp;stnnum=2995</link>queryType=showFrameset&amp;zone=2&amp;language=french&amp;region=4&amp;stnnum=2995</link> <description>Extraction du contenu de la table des marées...</description><description>Extraction du contenu de la table des marées...</description> </item></item> <item><item> <title>Cacouna - Prédictions des marées pour 7 jours</title><title>Cacouna - Prédictions des marées pour 7 jours</title> ...... </item></item> </channel></channel> </rss></rss> RSS 2.0RSS 2.0
  • 32. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 RSS – baladodiffusionRSS – baladodiffusion * Source : http://fr.wikipedia.org/wiki/Podcast La baladodiffusion (podcast) qui est la diffusion de contenu multimédia est basée sur les fluxLa baladodiffusion (podcast) qui est la diffusion de contenu multimédia est basée sur les flux RSS. Le logiciel de recherche de baladodiffusion télécharge automatiquement le fichierRSS. Le logiciel de recherche de baladodiffusion télécharge automatiquement le fichier multimédia associé à l'item du flux RSS. Utilisation de la balise <enclosure> :multimédia associé à l'item du flux RSS. Utilisation de la balise <enclosure> : <enclosure url="http://www.radio.org/balado/exemple.mp3" length="3968800" type="audio/mpeg" /><enclosure url="http://www.radio.org/balado/exemple.mp3" length="3968800" type="audio/mpeg" />
  • 33. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 ROME : Rss and atOM utilitiEs : une excellente bibliothèque Java en codeROME : Rss and atOM utilitiEs : une excellente bibliothèque Java en code source libre qui se base sur JDOMsource libre qui se base sur JDOM Support de toutes les versions de RSS et d'AtomSupport de toutes les versions de RSS et d'Atom Analyse, génération et conversion de flux RSS d'un format à l'autreAnalyse, génération et conversion de flux RSS d'un format à l'autre Sorties vers : String, File, java.io.Writer, org.w3c.dom.Document,Sorties vers : String, File, java.io.Writer, org.w3c.dom.Document, org.jdom.Documentorg.jdom.Document Entrées depuis : File, java.io.Reader, org.xml.sax.InputSource,Entrées depuis : File, java.io.Reader, org.xml.sax.InputSource, org.w3c.dom.Document, org.jdom.Document objectorg.w3c.dom.Document, org.jdom.Document object Un ensemble de modules : iTunes, A9 Open Search, Google Base, etc.Un ensemble de modules : iTunes, A9 Open Search, Google Base, etc. https://rome.dev.java.net/https://rome.dev.java.net/ ROMEROME * RDF : Resource Description Framework
  • 34. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 RSS - Avantages & inconvénientsRSS - Avantages & inconvénients * Source Clipart : http://www.clipart.com
  • 35. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 L'information étant rafraîchie régulièrement, l'usager peutL'information étant rafraîchie régulièrement, l'usager peut manquer une nouvelle importantemanquer une nouvelle importante Généralement pas d'archivageGénéralement pas d'archivage Surabondance d'information (infobésité)Surabondance d'information (infobésité) Accent sur la nouveauté, pas sur l'analyse et la réflexionAccent sur la nouveauté, pas sur l'analyse et la réflexion La licence RSS 2.0 appartient à la faculté de droit de l'UniversitéLa licence RSS 2.0 appartient à la faculté de droit de l'Université HarvardHarvard RSS - InconvénientsRSS - Inconvénients
  • 36. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Usager : permet d'être informé d'un contenu sans aller leUsager : permet d'être informé d'un contenu sans aller le consulterconsulter Diffuseur: attirer des visiteurs, syndiquer (partager desDiffuseur: attirer des visiteurs, syndiquer (partager des contenus), recyclage/réutillisation des contenuscontenus), recyclage/réutillisation des contenus Bon pour la veille, pour suivre l'actualité ou tenir informer desBon pour la veille, pour suivre l'actualité ou tenir informer des nouveautésnouveautés Grâce aux CSS, l'apparence peut être personnaliséeGrâce aux CSS, l'apparence peut être personnalisée Réutiliser le contenu issu d'un autre site tout en personnalisant laRéutiliser le contenu issu d'un autre site tout en personnalisant la présentationprésentation RSS - AvantagesRSS - Avantages
  • 37. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 AtomAtom AtomAtom * Source Clipart : http://www.clipart.com
  • 38. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Atom est un format de syndication créé en 2003 pour combiner laAtom est un format de syndication créé en 2003 pour combiner la simplicité de RSS 2.0 (i.e. non basé sur RDF) mais en conservantsimplicité de RSS 2.0 (i.e. non basé sur RDF) mais en conservant certains aspects de RSS 1.0 comme l'espace de nommagecertains aspects de RSS 1.0 comme l'espace de nommage Norme non propriétaire accrédité par l'IETF (Internet EngineeringNorme non propriétaire accrédité par l'IETF (Internet Engineering Task Force)Task Force) Créée en réaction au format RSS 2.0 qui appartient à la faculté deCréée en réaction au format RSS 2.0 qui appartient à la faculté de droit de l'Université Harvarddroit de l'Université Harvard Atom 0.3 est plus répandu mais la dernière version est Atom 1.0Atom 0.3 est plus répandu mais la dernière version est Atom 1.0 Atom sert d'API standard pour les blogues (Atom PublishingAtom sert d'API standard pour les blogues (Atom Publishing Protocol)Protocol) Choisi par Google pour BloggerChoisi par Google pour Blogger Propose un API REST (Atom Publishing Protocol)Propose un API REST (Atom Publishing Protocol) http://tools.ietf.org/html/rfc4287http://tools.ietf.org/html/rfc4287 AtomAtom
  • 39. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 <?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" version="0.3"><feed xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" version="0.3"> <title>Sample Feed (created with Rome)</title><title>Sample Feed (created with Rome)</title> <link rel="alternate" href="http://rome.dev.java.net" /><link rel="alternate" href="http://rome.dev.java.net" /> <tagline>This feed has been created using Rome (Java syndication utilities</tagline><tagline>This feed has been created using Rome (Java syndication utilities</tagline> <entry><entry> <title>Rome v1.0</title><title>Rome v1.0</title> <link rel="alternate" href="http://wiki.java.net/bin/view/Javawsxml/Rome01" /><link rel="alternate" href="http://wiki.java.net/bin/view/Javawsxml/Rome01" /> <author><author> <name /><name /> </author></author> <modified>2004-06-08T04:00:00Z</modified><modified>2004-06-08T04:00:00Z</modified> <issued>2004-06-08T04:00:00Z</issued><issued>2004-06-08T04:00:00Z</issued> <summary type="text/plain" mode="escaped">Initial release of Rome</summary><summary type="text/plain" mode="escaped">Initial release of Rome</summary> <dc:date>2004-06-08T04:00:00Z</dc:date><dc:date>2004-06-08T04:00:00Z</dc:date> </entry></entry> ...... </feed></feed> Atom – Exemple de flux AtomAtom – Exemple de flux Atom
  • 40. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 RESTREST RESTREST * Source Clipart : http://www.clipart.com
  • 41. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Pour des raisons de sécurité, un script JavaScript* provenant d'une pagePour des raisons de sécurité, un script JavaScript* provenant d'une page donnée n'a accès qu'à des objets JavaScript qui sont issus du mêmedonnée n'a accès qu'à des objets JavaScript qui sont issus du même domaine que la page d'origine.domaine que la page d'origine. La fameuse « Same Origin Policy » apparue avec Netscape 2 en 1996La fameuse « Same Origin Policy » apparue avec Netscape 2 en 1996 L'idée est d'empêcher qu'un script malicieux ait accès à de l'informationL'idée est d'empêcher qu'un script malicieux ait accès à de l'information confidentielle contenue dans une autre pageconfidentielle contenue dans une autre page Il est cependant possible d'accéder à un domaine apparentéIl est cependant possible d'accéder à un domaine apparenté Par exemple, soit l'URL d'origine :Par exemple, soit l'URL d'origine : http://www.abc.com/dir/page.htmlhttp://www.abc.com/dir/page.html Contrainte de sécurité SOPContrainte de sécurité SOP http://www.abc.com/dir2/page2.html autorisé même domaine https://www.abc.com/dir2/page2.html refusé protocole différent http://www.abc.com:81/dir2/page2.html refusé port différent http://www.abc.com/dir2/dir3/page3.html autorisé même domaine http://abc.com/dir/page2.html refusé domaine différent * Note : qui roule dans un bac de sable (sandbox)* Note : qui roule dans un bac de sable (sandbox)
  • 42. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Les applications Web centrées client requièrent un accès élargi auxLes applications Web centrées client requièrent un accès élargi aux services hébergés sur d'autres serveursservices hébergés sur d'autres serveurs Script signéScript signé « couche proxy » sur le serveur, puisque le serveur n'a pas les« couche proxy » sur le serveur, puisque le serveur n'a pas les contraintes de sécurité du fureteurcontraintes de sécurité du fureteur Le fureteur n'applique pas la règle SOP à toutes les ressources d'une pageLe fureteur n'applique pas la règle SOP à toutes les ressources d'une page Web. Par exemple, une balise <img...> peut référer à une URL dans unWeb. Par exemple, une balise <img...> peut référer à une URL dans un autre domaine.autre domaine. On peut aussi contourner la règle de sécurité SOP en prenant avantageOn peut aussi contourner la règle de sécurité SOP en prenant avantage de la balise <script>. Une balise <script> peut référer à un code qui estde la balise <script>. Une balise <script> peut référer à un code qui est sur une autre page. Cependant, il faut pouvoir faire confiance à ce script.sur une autre page. Cependant, il faut pouvoir faire confiance à ce script. Contournement de la règle SOPContournement de la règle SOP
  • 43. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 RESTREST REST (REpresentational State Transfer)REST (REpresentational State Transfer) Repose sur la notion de ressourcesRepose sur la notion de ressources Pas de gestion d'état (stateless)Pas de gestion d'état (stateless) Chaque ressource est accessible via une URI uniqueChaque ressource est accessible via une URI unique Chaque ressource répond à un ensemble de commandes HTTP de baseChaque ressource répond à un ensemble de commandes HTTP de base qui correspondent aux opéations classiques dites CRUDqui correspondent aux opéations classiques dites CRUD Un ensemble de types de contenus MIME en requête et en réponseUn ensemble de types de contenus MIME en requête et en réponse – HTTP CRUD Opération POSTPOST CREATECREATE créationcréation GETGET READREAD lecturelecture PUTPUT UPDATEUPDATE mise à jourmise à jour DELETEDELETE DELETEDELETE suppressionsuppression
  • 44. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Projet JAX-RS (JSR-311)Projet JAX-RS (JSR-311) http://cwiki.apache.org/CXF20DOC/jax-rs-jsr-311.htmlhttp://cwiki.apache.org/CXF20DOC/jax-rs-jsr-311.html Un outil à base d'annotations pour créer des services RESTUn outil à base d'annotations pour créer des services REST @Path("/commande")@Path("/commande") public class PriseCommandeService {public class PriseCommandeService { @GET@GET @Path(“/{id}”)@Path(“/{id}”) public String getCommande()@PathParam(“id”) int commandeId {public String getCommande()@PathParam(“id”) int commandeId { // corps de la méthode// corps de la méthode }} }} En furetant à l'addresse hypothétique http://www.abc.com/commande/123 JAX-RSEn furetant à l'addresse hypothétique http://www.abc.com/commande/123 JAX-RS va faire une requête HTTP à la méthode getCommande() et va recevoir le contenuva faire une requête HTTP à la méthode getCommande() et va recevoir le contenu retourné par la méthode getCommande()retourné par la méthode getCommande() REST –REST – Quelques outils et ressourcesQuelques outils et ressources
  • 45. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Projet Restlet – bonne bibliothèque REST avec une intégration à GWTProjet Restlet – bonne bibliothèque REST avec une intégration à GWT http://www.restlet.org/about/http://www.restlet.org/about/ Restlet First steps (tutoriel)Restlet First steps (tutoriel) http://www.restlet.org/documentation/1.1/firstStepshttp://www.restlet.org/documentation/1.1/firstSteps Restlet-GWT moduleRestlet-GWT module http://wiki.restlet.org/docs_1.1/13-restlet/28-restlet/144-restlet.htmlhttp://wiki.restlet.org/docs_1.1/13-restlet/28-restlet/144-restlet.html REST –REST – Projet RestletProjet Restlet
  • 46. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Introduction to REST (article JavaLobby)Introduction to REST (article JavaLobby) http://java.dzone.com/articles/intro-resthttp://java.dzone.com/articles/intro-rest http://java.dzone.com/articles/putting-java-resthttp://java.dzone.com/articles/putting-java-rest LivreLivre RESTful Web ServicesRESTful Web Services Leonard Richardson; Sam RubyLeonard Richardson; Sam Ruby O'Reilly Media, Inc.O'Reilly Media, Inc. 8 mai, 20078 mai, 2007 REST –REST – Quelques outils et ressourcesQuelques outils et ressources
  • 47. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 REST - Avantages & inconvénientsREST - Avantages & inconvénients * Source Clipart : http://www.clipart.com
  • 48. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 REST est de plus en plus populaireREST est de plus en plus populaire Les grands sites Web 2.0 comme Amazon, Yahoo!, Flickr offrent desLes grands sites Web 2.0 comme Amazon, Yahoo!, Flickr offrent des services REST en plus des services SOAP traditionnelsservices REST en plus des services SOAP traditionnels REST est bien intégré au canevas d'applications Ruby On Rails (RoR)REST est bien intégré au canevas d'applications Ruby On Rails (RoR) REST - AvantagesREST - Avantages
  • 49. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Pas conçu pour les transactionsPas conçu pour les transactions Pas conçu pour les protocoles avec étatsPas conçu pour les protocoles avec états REST - InconvénientsREST - Inconvénients
  • 50. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Google GearsGoogle Gears GearsGears * Source Clipart : http://www.clipart.com
  • 51. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Google GearsGoogle Gears L'usage des cookies pour la persistance est assez limitéL'usage des cookies pour la persistance est assez limité Google Gears est un plugiciel (extension) du fureteurGoogle Gears est un plugiciel (extension) du fureteur qui permet de mémoriser de plus grandes quantités dequi permet de mémoriser de plus grandes quantités de données sur le poste clientdonnées sur le poste client Gears fournit une base de données SQLGears fournit une base de données SQL Pour FireFox 1.5 + et IE 6+Pour FireFox 1.5 + et IE 6+ http://gears.google.com/http://gears.google.com/
  • 52. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 Google Gears – un peu de codeGoogle Gears – un peu de code public void save() throws StorageException {public void save() throws StorageException { // Vérifier que Google Gears est installé// Vérifier que Google Gears est installé if( ! IsGearsInstalled() ) throw new StorageException("Echec sauvegarde, Gears pas installé");if( ! IsGearsInstalled() ) throw new StorageException("Echec sauvegarde, Gears pas installé"); try {try { // Créer la table maBDGears si elle n'existe pas// Créer la table maBDGears si elle n'existe pas Database db = new Database("maBdGears");Database db = new Database("maBdGears"); db.execute("create table if not exists maBdGears (key varchar(255), value text)");db.execute("create table if not exists maBdGears (key varchar(255), value text)"); // Sauvegarder la liste de valeurs contenues dans la Map getValues() dans la table// Sauvegarder la liste de valeurs contenues dans la Map getValues() dans la table for(Iterator iter=getValues().entrySet().iterator(); iter.hasNext(); ){for(Iterator iter=getValues().entrySet().iterator(); iter.hasNext(); ){ Entry entry = (Entry) iter.next();Entry entry = (Entry) iter.next(); db.execute("insert into maBdGears values (?, ?)", new String[] {db.execute("insert into maBdGears values (?, ?)", new String[] { (String) entry.getKey(), (String) entry.getValue()(String) entry.getKey(), (String) entry.getValue() });}); }} }} catch (GearsException e) { throw new StorageException( "Echec sauvegarde", e );catch (GearsException e) { throw new StorageException( "Echec sauvegarde", e ); }} }} * Source : R. Dewsbury 2008 – Chap.6, p. 306-307* Source : R. Dewsbury 2008 – Chap.6, p. 306-307
  • 53. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 COMETCOMET Le terme COMET a été inventé par Alex Russell en mars 2006 en référence à la poudre à récurer Comet concurrente de la marque Ajax! Source : A. Russell - http://alex.dojotoolkit.org/2006/03/comet-low-latency-data-for-the-browser/
  • 54. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 COMETCOMET COMETCOMET * Source Clipart : http://www.clipart.com
  • 55. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 COMETCOMET Comet est une architecture d'applications Web qui permet à un serveurComet est une architecture d'applications Web qui permet à un serveur d'envoyer des données à un client (fureteur) sans attendre une requêted'envoyer des données à un client (fureteur) sans attendre une requête expliciteexplicite On parle aussi de « Server-Push » ou de communication à faible latenceOn parle aussi de « Server-Push » ou de communication à faible latence (« Low-Latency Data Transfer »)(« Low-Latency Data Transfer ») Personnellement j'aime bien le terme de « communication continue etPersonnellement j'aime bien le terme de « communication continue et instantanée »instantanée » D'ailleurs les principales applications actuelles tournent autour de laD'ailleurs les principales applications actuelles tournent autour de la messagerie instantanée comme Gtalk ou Meebo (messagerie instantanée comme Gtalk ou Meebo ( http://mail.google.com/mail/help/chat.htmlhttp://mail.google.com/mail/help/chat.html,, www.meebo.comwww.meebo.com ) la) la télésurveillance et le travail collaboratif (multiusagers) en temps réeltélésurveillance et le travail collaboratif (multiusagers) en temps réel Comet repose sur un protocole à base d'événementsComet repose sur un protocole à base d'événements Une architecture à base d'événement ou de messages existe déjà dans lesUne architecture à base d'événement ou de messages existe déjà dans les architectures SOAarchitectures SOA
  • 56. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 COMETCOMET Une application Comet peut transmettre des données au client à n'importe quel moment (pas seulement en réponse à une requête de l'usager). Les données sont transmises au travers une unique connection précédemment ouverte. Le temps de latence est ainsi minimisé.
  • 57. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 COMET – défi techniqueCOMET – défi technique Comet requiert un protocole à base d'événements et une réaction instantanéeComet requiert un protocole à base d'événements et une réaction instantanée Peut se faire avec des sockets TCP/IP (=> plugiciels)Peut se faire avec des sockets TCP/IP (=> plugiciels) HTTP ne supporte pas la diffusion spontanée d'événements. HTTP répondHTTP ne supporte pas la diffusion spontanée d'événements. HTTP répond seulement en réaction à une requête d'un client. Un serveur HTTP n'envoie pas deseulement en réaction à une requête d'un client. Un serveur HTTP n'envoie pas de données sans une requêtedonnées sans une requête Une autre technique est le Polling qui consiste à faire des requêtes au serveur àUne autre technique est le Polling qui consiste à faire des requêtes au serveur à intervalles réguliers. En réduisant l'intervalle on réduit la latence.intervalles réguliers. En réduisant l'intervalle on réduit la latence. Chaque client en attente d'un événement bloque un Thread sur le serveur (1Chaque client en attente d'un événement bloque un Thread sur le serveur (1 connexion = 1 Thread). Or un conteneur de servlets peut servir un maximum deconnexion = 1 Thread). Or un conteneur de servlets peut servir un maximum de Threads concurrents de l'ordre de 100 à 200. Au delà il faut un autre mécanismeThreads concurrents de l'ordre de 100 à 200. Au delà il faut un autre mécanisme Apache Tomcat version 6+ supporte l'interface CometProcessor avec ses servletsApache Tomcat version 6+ supporte l'interface CometProcessor avec ses servlets qui permet le partage d'un Thread par plusieurs connexions.qui permet le partage d'un Thread par plusieurs connexions. Le support du Server Push est incorporé dans la spécification Servlet 3.0. et lesLe support du Server Push est incorporé dans la spécification Servlet 3.0. et les conteneurs de servlet JEE6conteneurs de servlet JEE6 http://jcp.org/en/jsr/detail?id=315http://jcp.org/en/jsr/detail?id=315
  • 58. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 COMET & GWTCOMET & GWT Comet with GWTComet with GWT http://code.google.com/p/google-web-toolkit-incubator/wiki/ServerPushFAQhttp://code.google.com/p/google-web-toolkit-incubator/wiki/ServerPushFAQ Rocket-GWT RemotingRocket-GWT Remoting http://code.google.com/p/rocket-gwt/wiki/Comethttp://code.google.com/p/rocket-gwt/wiki/Comet Une autre solutionUne autre solution http://groups.google.com/group/Google-Webhttp://groups.google.com/group/Google-Web
  • 59. Montréal, novembre 2008Montréal, novembre 2008GTI-780 / MTI-780GTI-780 / MTI-780 QuestionsQuestions ?? * Source Clipart : http://www.clipart.com