Architectures Web Services RESTful



Documents pareils
4. SERVICES WEB REST 46

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

Applications et Services WEB: Architecture REST

Architecture Orientée Service, JSON et API REST

Développement des Systèmes d Information

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

Introduction aux «Services Web»

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

Application Web et J2EE

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

Bien architecturer une application REST

Les Architectures Orientées Services (SOA)

Mise en œuvre des serveurs d application

PRIMAVERA P6 ENTERPRISE PROJECT PORTFOLIO MANAGEMENT WEB SERVICES

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

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

Petite définition : Présentation :

Hébergement de site web Damien Nouvel

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

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

Catalogue des Formations Techniques

Technologies pour Web Services faciles : REST, JSON

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Programmation Web. Madalina Croitoru IUT Montpellier

INGÉNIEUR LOGICIEL JAVAEE / GROOVY 8 ANS D EXPÉRIENCE

Module BD et sites WEB

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

Technologies Web. Ludovic Denoyer Sylvain Lamprier Mohamed Amine Baazizi Gabriella Contardo Narcisse Nya. Université Pierre et Marie Curie

Programmation Web. Introduction

Formation en Logiciels Libres. Fiche d inscription

(structure des entêtes)

Paris Airports - Web API Airports Path finding

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

Stockage du fichier dans une table mysql:

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Youssef LYHYAOUI Ingénieur Java/J2EE, SOA, ESB, Web services 31 ans Statut : Indépendant SITUATION ACTUELLE

Hébergement de sites Web

les techniques d'extraction, les formulaires et intégration dans un site WEB

Les grandes facettes du développement Web Nicolas Thouvenin - Stéphane Gully

Développement d'un logiciel VoIP BlackBerry

Datalift. + + Architecture Modularité Déploiements. d j = 09/04/2015 Laurent BIHANIC

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Java pour le Web. Cours Java - F. Michel

Web Tier : déploiement de servlets

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

Architectures en couches pour applications web Rappel : Architecture en couches

Cyrille GUERIN 823, place Soulanges Brossard, J4X1L8

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

Programmation Web Avancée Introduction aux services Web

Compte Rendu d intégration d application

Le serveur HTTPd WASD. Jean-François Piéronne

30 ans d ingénierie, 23 ans de conseil en architecture de SI

Introduction aux. services web 2 / 2

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

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

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

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

HTTP. Technologies du Web. Programmation Web côté serveur. Mastère spécialisé Management et nouvelles technologies, 16 novembre 2009

Messagerie asynchrone et Services Web

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Serveurs de noms Protocoles HTTP et FTP

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

LICENCE PROFESSIONNELLE

Environnements de Développement

Shibboleth. David Verdin - JOSY "Authentification centralisée pour les applications web" - Paris - 4 février mai

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Alfstore workflow framework Spécification technique

Web des services : REST

Application web de gestion de comptes en banques

Protocoles Applicatifs

Déployer les Fonts, Icones, et Images avec Forms Services 11G

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

1. Considérations sur le développement rapide d'application et les méthodes agiles

Le stockage local de données en HTML5

Plan de notre intervention 1. Pourquoi le test de charge? 2. Les différents types de tests de charge 1.1. Le test de performance 1.2.

GWT à l'épreuve du feu. by Sami Jaber (DNG Consulting)

Les Services Web. Jean-Pierre BORG EFORT

Etude de cas : PGE JEE V2

Notre Catalogue des Formations IT / 2015

1. Installation d'un serveur d'application JBoss:

HTTP HTTP. IUT1 dpt SRC L Isle d Abeau Jean-françois Berdjugin. Introduction et architecture Messages Authentification Conclusion

Cloud. Définition? 08/11/2012. James Urquhart The Wisdom of Clouds

Mysql. Les requêtes préparées Prepared statements

Vulnérabilités et sécurisation des applications Web

MapReduce et Hadoop. Alexandre Denis Inria Bordeaux Sud-Ouest France ENSEIRB PG306

Introduction aux applications réparties

A. Architecture du serveur Tomcat 6

INF8007 Langages de script

10. Base de données et Web. OlivierCuré

ArcGIS 10.1 for Server

Nouvelles Plateformes Technologiques

Oracle Fusion Middleware Concepts Guide 11g Release 1 (11.1.1) Figure 1-1 Architecture Middleware

INGÉNIEUR - DÉVELOPPEUR EXPÉRIMENT É JAVA - J2EE. 27 ans - 5 ans d'expérience

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Apache Tomcat 6. Guide d'administration du serveur Java EE sous Windows et Linux. Résumé. Étienne LANGLET

Architectures d'intégration de données

Transcription:

Architectures Web Services RESTful Alexandre Denis Alexandre.Denis@inria.fr Inria Bordeaux Sud-Ouest France ENSEIRB PG306

REST REST Representational State Transfer Roy Fielding (2000) Décollage vers 2006-2007 Alternative à SOAP protocole historique des Web Services Désormais l'interface prédominante dans les WS Approche minimaliste - 2

RESTful Vrai REST / faux REST REST est une philosophie de conception d'interface Pas réellement une norme Pas un protocole RESTful = vrai REST Parfois : architecture REST, service RESTful - 3

Propriétés REST Client/serveur Sans état serveur sans mémoire Cacheable, proxy Conséquence de «sans état» Interface uniforme Ressources identifiées de façon unitaire Manipulation des ressources au travers de représentations Messages auto-descriptifs HATEOS Hypermedia as the Engine of Application State Système en couches - 4

Ressources REST Architecture centrée sur les ressources Pas sur les actions Entité de base : une ressource ~ objet Arboressence de ressources Point d'entrée de l'application : ressource racine Verbes (~méthodes) appliqué aux ressources Façon base de données: put, get, create, delete Liens direct entre ressources - 5

HATEOS Hypermedia as the Engine RPC en HTTP en non au-dessus de HTTP Pourquoi ré-implémenter un mécanisme RPC (SOAP) sur HTTP, alors que HTTP fournit déjà nativement : Un système de requêtes (GET, POST, PUT, CREATE, DELETE) Un système d'adressage d'entités (URI) Un système de retour d'erreur (404, etc.) Un système de typage (Content-Type, etc.) HTTP est conçu depuis l'origine comme un vrai protocole de requêtes Même si le WWW utilise quasi-exclusivement GET - 6

Représentations Les données échangées sur le fil sont une représentation Clairement distincte de l'implémentation Sérialisées en un format à la carte Souvent JSON et XML Personnalisable par le client Headers HTTP Accept et Content-Type Représentation auto-descriptive Content-Type, charset, compression Tout est déjà prévu dans HTTP - 7

Représentations - Exemples Représente une ressource complète S'il y a besoin de découper, c'est que le modèle de données est à revoir Représentation JSON et XML, pour une même donnée Applications Web/AJAX souvent en JSON XML : habituel en WS D'autres formats sont possibles { } "ID": "1", "Name": "M Vaqqas", "Email": "m.vaqqas@gmail.com", "Country": "India" <Person> <ID>1</ID> <Name>M Vaqqas</Name> <Email>m.vaqqas@gmail.com</Email> <Country>India</Country> </Person> Exemple : Dr. Dobbs, M. Vaqqas - 8

Messages Format habituel des messages HTTP Les entités HTTP sont mappées directement sur les entités REST : Les requêtes HTTP sur les verbes REST Les URI HTTP sur les ressources REST - 9

Requête - exemple Exemple de requête POST POST http://myservice/person/ Host: MyService Content-Type: text/xml; charset=utf-8 Content-Length: 123 <?xml version="1.0" encoding="utf-8"?> <Person> <ID>1</ID> <Name>M Vaqqas</Name> <Email>m.vaqqas@gmail.com</Email> <Country>India</Country> </Person> PUT v.s. POST par convention : PUT : crée/actualise une ressource en donnant l'uri de la ressource POST : on donne l'uri d'une méthode C'est le serveur qui assigne l'uri de la ressource - 10

Bonne conduite A l'utilisateur d'appliquer les conventions Si on peut utiliser une URI de ressource, c'est que c'est une ressource! À ne pas faire : GET http://myservice/persons?id=1 Préférer : GET http://myservice/persons/1 GET ne fait pas d'effet de bord À ne pas faire : GET http://myservice/deleteperson/1 Préférer : DELETE http://myservice/persons/1 PUT est idempotent Appeler la requête plusieurs fois à le même effet qu'une seule fois Pas d'état dans le serveur À ne pas faire : GET http://myservice/persons/1 HTTP/1.1 Préférer : liste de liens, itérateur côté client GET http://myservice/nextperson HTTP/1.1-11

Description d'interfaces Description d'une interface REST WSDL 2.0 a une projection REST WADL - Web Application Description Language Décrit les types RSDL - RESTful Service Description Language Décrit les URI Langages d'usage marginal Le plus souvent, doc en texte <method name="get" id="itemsearch"> <request> <param name="service" style="query" fixed="awsecommerceservice"/> <param name="version" style="query" fixed="2005-07-26"/> <param name="operation" style="query" fixed="itemsearch"/> <param name="subscriptionid" style="query" type="xsd:string" required="true"/> <param name="searchindex" style="query" type="aws:searchindextype" required="true"> <option value="books"/> <option value="dvd"/> <option value="music"/> </param> <param name="keywords" style="query" type="aws:keywordlist" required="true"/> <param name="responsegroup" style="query" type="aws:responsegrouptype" repeating="true"> <option value="small"/> <option value="medium"/> <option value="large"/> <option value="images"/> </param> </request> <response> <representation mediatype="text/xml" element="aws:itemsearchresponse"/> </response> </method> Exemple : Amazon - 12

Outils pour services RESTful Assemblage de protocoles et formats normalisés Pas de modèle de programmation spécifique! Pas d'outil / API / workflow standard Outil dédié ou assemblage ad-hoc d'une lib HTTP et d'une lib JSON Approches asymétriques côté client et serveur - typiquement : Serveur : framework, annotations, serveurs d'applications Client : scripts, langages web, assemblage ad-hoc HTTP+parseur JSON/XML - 13

Middleware pour service RESTful JAX-RS - Java API for RESTful Web Services Annotations de code Java Frameworks Java Restlet Apache CXF Framework Java, pionnier (2007), interface spécifique et JAX-RS Fondation Apache, WS-*, RESTful spécifique ou JAX-RS, etc. Oracle Jersey JAX-RS, Maven, Tomcat Oracle WebLogic, RedHat JBoss RESTEasy, Java JSP Ruby-on-rails, Python Django Solutions ad-hoc Servlets ad-hoc, php+rewrite rule, Node.js, etc. - 14

Clients REST Grand nombre d'approches! Tout ce qui sait faire du HTTP peut être client REST Partie cliente d'un framework REST Bibliothèques Ruby, python Assemblage ad-hoc en Javascript, PHP En C : libcurl + Jansson, libcurl + expat Script shell, curl - 15

JAX-RS JAX-RS - Java API for RESTful Web Services Annotations de code Java Pour préciser : type de requête, URI, type import javax.ws.rs.get; import javax.ws.rs.path; import javax.ws.rs.produces; import javax.ws.rs.core.mediatype; @Path("/hello") public class Hello { @GET @Produces(MediaType.TEXT_PLAIN) public String sayplaintexthello() { return "Hello Jersey"; } } Exemple : Jersey - 16

JAX-RS @Path("/hello") public class Hello { // This method is called if TEXT_PLAIN is request @GET @Produces(MediaType.TEXT_PLAIN) public String sayplaintexthello() { return "Hello Jersey"; } // This method is called if XML is request @GET @Produces(MediaType.TEXT_XML) public String sayxmlhello() { return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>"; } } // This method is called if HTML is request @GET @Produces(MediaType.TEXT_HTML) public String sayhtmlhello() { return "<html> " + "<title>" + "Hello Jersey" + "</title>" + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> "; } Exemple : Jersey - 17

Référence JAX-RS Liste des annotations @Path @GET @PUT @POST @DELETE @HEAD @PathParam @QueryParam @Consumes @Produces @Provider indique un morceau du chemin de l'uri désigne une méthode pour traiter les requêtes GET désigne une méthode pour traiter les requêtes PUT désigne une méthode pour traiter les requêtes POST désigne une méthode pour traiter les requêtes DELETE désigne une méthode pour traiter les requêtes HEAD extrait un paramètre du chemin extrait un paramètre de l'uri type MIME des données acceptées par la méthode type MIME des données produites par la méthode indique qu'une classe fournit des méthodes auxiliaires pour JAX-RS - 18

JAXB JAXB - Java Architecture for XML Binding Sérialiseur/parseur XML en Java Entièrement généré par annotations de code Conversion XSD <-> code Java annoté import javax.xml.bind.annotation.*; @XmlRootElement(name="hello") public class HelloObject { public HelloObject(int a) { id = a; } @XmlElement(name="id") int id; } - 19

Travail à faire - 20

Exemple REST Téléchargez l'exemple hello-jaxrs.tar.gz sur la page du cours Les exemples utilisent : L'interface JAX-RS de Restlet côté serveur Un assemblage ad-hoc Apache Http Components + JAXB côté client Des routines de test à l'aide de curl Vous êtes encouragés à tester d'autres solutions côté client selon les langages que vous maîtrisez (Ruby, Python, PHP, Javascript) du moment qu'une bibliothèque http cliente est disponible et un parseur XML ou JSON - 21

REST avec curl Parcourez le code du serveur Identifiez les différents types de requêtes Identifiez les manipulations et conversions de données (texte, XML) Lancez des requêtes vers le serveur à l'aide de l'outil curl Consultez le manuel de curl si besoin Note : REST utilise intensivement le Content-Type. Précisez-le toujours à curl Testez les différents types de requêtes : GET, PUT, POST - 22

REST avec le client Java Http Components Parcourez le code du client Identifiez les parties relatives à HTTP et à XML Ajoutez d'autres requêtes vers les ressources du serveur - 23

Construire un service REST Nous proposons d'écrire un service à la IMDb Proposez une interface pour décrire un film avec : titre, réalisateur, acteurs Quelles sont les différentes ressources? Comment construire l'arboressence? Quelles sont les opérations? Il faut au moins : ajout d'entrée, interrogation d'une fiche, recherche par titre, recherche par personne (réalisateur, acteur) Créez un script shell utilisant curl pour remplir la base à l'initialisation Créez un client Java effectuant des recherches - 24

Vers un service externe Un grand nombre de sites «Web 2.0» proposent une interface REST : Facebook, Google, Twitter, Instagram, IMDb, Wikipedia, etc. Choisissez votre site favori, consultez sa documentation, écrivez un client! Note : il y a toujours une authentification qui peut être délicate à gérer - 25

À vous de jouer! http://dept-info.labri.fr/~denis/