Vous êtes sur la page 1sur 16

XML SUR HTTP ARCHITECTURE REST

Eric van der Vlist (vdv@dyomedea.com) XML sur HTTP architecture REST
Web Services Convention

Juin 2004

Eric van der Vlist (vdv@dyomedea.com)

REST-- WS Convention 2004 --

Page 1

HTTP (RAPPELS)
Dfinitions
The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems (IETF). HTTP, abrviation de hyper text transfer protocol, est un protocole informatique utilis pour transfrer des documents hypertextes ou hypermdias entre un serveur Web et un client Web. (source : Wikipdia)

Principes
Intgr dans le systme d'adressage URI/URL
http:estl'undesserviceslesplusutilissdanslesURL(UniformResourceLocators) quisontellesmmesl'undesdeuxtypesd'URI(UniformResourceIdentifiers). Cesystmed'adressagepermetnonseulementd'identifierlesressourcespubliessurle Webmaisgalementdedcrireleslesliensentreressources.

Protocole client/serveur
HTTPestunprotocoleclient/serveur(dontasymtrique):unclientenvoiunerequteet leserveurluirenvoiunerponse.

Protocole sans connexion et sans tat


LeprotocoleHTTPparluimmeestsansconnexionetsanstat,c'estdirequechaque requteestconsidredemanireindpendantesansqu'ilnesoitdemandauserveurde mmoriseraucuncontexte. Celan'interditpasunserveurWebdesimuleruneconnexionetdemainteniruntat, maiscespratiquesdevraienttrelimitesaumaximumafinderespecterlesprincipes architecturauxduWeb.

S'appuie sur les types mime ( Internet Media Types )


Lesdocumentstransmisparlesrequtesetlesrponsessontdcritsensuivantlestypes mime(rebaptissInternetMediaTypes),cequipermetdetransmettretouttypede documents,ycomprisenformatsbinaires. Eric van der Vlist (vdv@dyomedea.com) REST-- WS Convention 2004 -Page 2

Exemple
HTTPreposesurdesprincipestrssimples commenous pouvonsleconstatersurcet exemple:

Requte
Larequteestexprimeparlapremireligne: LamthodeestGETquisignifiedonnemoiundocument,ledocumentest/, la version du protocole HTTP utilise ici est 1.1 et il se trouve sur la machine poweredge.paris.dyomedea.com. Lesautrelignessontdesheadersquiapportentdesinformationscomplmentairessur lecontextedanslequelcetterequteesteffectue. GET / HTTP/1.1 Host: poweredge.paris.dyomedea.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040413 Epiphany/1.0.8 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/ plain;q=0.8,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: en,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: Apache=10.0.0.2.139451059503845970

Rponse
Lapremirelignedonnelecompterendu(ici,200signifieOK).Leslignessuivantes sont des headers donnant des informations complmentaires suivis, aprs un saut de ligne,parlecontenu(iciundocumentHTML). HTTP/1.1 200 OK Date: Thu, 10 Jun 2004 12:19:17 GMT Server: Apache/1 .3.26 (Unix) Debian GNU/Linu x PHP/4.1.2 ApacheJServ/1.1.2 Last-Modified: Tue, 27 Aug 2002 16:21:3 6 GMT
ETag: " 3a802b-120-3d6ba710" Accept-Ranges: bytes Content-Length: 288 Keep-Alive: timeout =15, max=100 Connection: Keep-Alive

Eric van der Vlist (vdv@dyomedea.com)

REST-- WS Convention 2004 --

Page 3

Content-Type: text /html; charset =iso-8859-1 <html> <head> <title>Under construction @ dyomedea.com</ title> </head> <body> <h1 align=center>Under construction @<a href="http://dyomedea.com">dyomedea.com</a></h1> < p align="center"> <img src="oeuf.gif"/> <br> <a href="mailto:vdv@dyomedea.com">vdv@dyomedea.com</a > </p> </body> </html>

Les principales mthodes HTTP


GET
LasmantiquedelamthodeGETestletlchargementd'undocument. LaspcificationHTTP(IETFrfc2616)indiquequecettemthodedevraittresreet neprovoqueraucuneactionautrequeletlchargementd'uneressourceetnedevraiten particulierpasprovoquerd'effetdebordauniveauduserveur. Beaucoupd'applicationsWebignorentcettergle.

HEAD
LasmantiquedelamthodeHEADestlammequecelledelamthodeGETsauf queseulslesheaderssontrenvoysdanslarponse. Cettemthodepermet donc de testersiundocumentexiste sansle tlchargeret de vrifiersontype,sadatedemodification,...

POST
LasmantiquedelamthodePOSTestletransfertd'informationduclientversle serveur. L'URL associe la requte POST identifie l'action effectuer et non l'emplacement auquellesinformationstransmisessontventuellementpublies. Si cette information est publie sur le serveur et accessible au moyen d'une URL, le serveurpeutindiquercetteadressedanssarponse.Danslecascontraire,leserveur renvoiundocumentservantdecompterendu.

PUT
LasmantiquedelamthodePUTestlamisejourd'uneressourceaccessiblesurle serveur. LarequtePUTestaccompagnedudocumentpublieretl'URLassocieestl'adresse laquellecedocumentdoittrepubli. Eric van der Vlist (vdv@dyomedea.com) REST-- WS Convention 2004 -Page 4

DELETE
LasmantiquedelamthodeDELETEestl'effacementphysiqueoulogiqued'une ressourceaccessiblesurleserveur.

Sans connexion et sans tat?


C'est vrai au niveau du protocole
LeprotocoleHTTPparluimmen'entretientaucuneinformationdeconnexionoud'tat.

Pas au niveau des applications Web


LesapplicationWeb,commetouteslesapplicationontbesoindemainteniruncontexteet sileprotocolenelegrepas,ellesvontdevoirlefaireparellesmmes.

Stockage sur le poste client (URL ou cookies)


Lecontextepeuttrestocksurleposteclientettransmisauserveurchaquerequte notammentdansl'URL(mthodeconseille)ousousformedecookies(viter).

Stockage sur le serveur (POST, PUT, DELETE)


Lecontextepeutgalementtrestocksurleserveuretleclientdetransmetplusalors danssesrequtesqu'uneinformationpermettantd'identifierlecontexte.Danscecas,il estconseilld'utiliserlesmthodesPOST,PUTetDELETEpourgrerlecontexte.

REST
Representational State Transfer (REST)
Thse de Roy Fielding (2000)
REST a t introduit en 2000 par Roy Fielding, prsident de la fondation Apache et membre actif de l'IETF et diteur de HTTP 1.1 dans le cadre d'une thse en... philosophie!

Principes architecturaux pour applications Web


Ilnes'agitpasd'unstandard,maisd'unesriedeprincipesarchitecturauxpermettant auxapplicationsWebderespecterlesprincipesarchitecturauxduWebetdoncdetirer pleinementpartiedesonpotentiel.

Eric van der Vlist (vdv@dyomedea.com)

REST-- WS Convention 2004 --

Page 5

Affirme le caractre sans tat et sans connexion


Parmi cesprincipes,le plusnotable estla promotionducaractresanstatetsans connexion du protocole HTTP au rang de principe de base que les applications ne devraientpascherchercontourner.

REST != HTTP
REST < HTTP
Danssathse,RoyFieldinglisteplusieurslacunesdeHTTPquisontgnantespourla ralisationdesystmesRESTetmmeunefonctionnalit(lescookies)quiestcontraire sesprincipes. OnpeutdonccrireuneapplicationHTTPsansrespecterlesprincipesRESTetREST peutdonctreconsidrcommeunsousensembledesfonctionnalitsdeHTTP.

REST = HTTP + URI + Mime


HTTPtantlabasedesapplicationsWeb,RESTestfortementassociHTTPmaisne serestreintpasHTTP. Entantqueprincipearchitectural,RESTinfluencegalementlamanired'utiliserles URIetlestypesmime.

REST ~ HTTP
Enpratique,RESTestnanmoinstrsfidleHTTPdanslamesureoilconduit essayerd'utiliseraumieuxlesdiffrentesmthodes(GET,POST,PUT,DELETE)mises notredispositionparHTTPenrespectantleursmantique.

XML ET HTTP
XML shall be straightforwardly usable over the Internet (XML 1.0).
LepremierdesdesigngoalsdeXMLestd'trefacilementutilisablesurInternetet l'associationdeXMLetdeHTTPestplusquenaturelle.

Eric van der Vlist (vdv@dyomedea.com)

REST-- WS Convention 2004 --

Page 6

And it is!
Etc'estlecaspuisquedenombreuseapplicationsralisentdepuisdesannesdesservices websanslesavoirenutilisantXMLsurHTTP.

XML et mthodes HTTP


LesdiffrentesmthodesHTTPsontbienadaptesuncontenuXML.

POST : envoi d'un document XML


Lamthode POST est typiquement utilise pour envoyer unnouveau document XML d'unclientversunserveur(parexempleunecommande).Enrponsecetterequte,le serveurpeutrenvoyeruncompterendusousformed'undocumentXMLmaisgalement l'adresselaquelleledocumentatstocketpeuttreretrouv,modifiousupprim.

HEAD : informations sur un document XML


LamthodeHEADpeuttreutilisepourrcuprerdesinformationssurundocument XMLetvrifiernotammentsiledocumentatmodifi.

GET : rcupration d'un document XML


LamthodeGETpeuttreutilispourinterrogerunserveur.Ellepeutservirrcuprer lacommandeaprsqueleserveuraitrajoutunnumrodecommande.

PUT : mise jour d'un document XML


Lorsqu'ilestncessairedemodifieruneinformationenvoyeparPOSTetpublieparle serveur, on peut utiliser la mthode PUT. Elle peut servir, par exemple, prciser l'adressedelivraisonsurnotrecommande.

DELETE : suppression d'un document XML


Sil'onsouhaiteannulerlacommande,pourquoinepasutiliserlamthodeDELETEdont c'estlafonction?

EXEMPLE : SIRENE XML


Un des premiers schmas publis par l'ADAE (2000)
SIRENEXMLest l'undespremiersschmasavoirtpubli surle rpertoiredes schmas XML de l'administration Eric van der Vlist (vdv@dyomedea.com) REST-- WS Convention 2004 -Page 7

(http://www.adae.gouv.fr/upload/documents/architecture.pdf).

Service Web scuris HTTP(S)/XML


Ils'agitd'unservicewebutilisantHTTPscuritparSSL(HTTPS)pourdonneraccsau rpertoire SIRENE. Les requtes et les rponses sont formalises sous forme de documentsXML.

Pourrait tre plus REST


Jepensequel'onpeutdirequebienquecetteapplicationutiliseXMLsurHTTP,pelle ourraittred'avantageconformeauxprincipesRESTqu'ellenel'est.

En attribuant des URLs aux tablissements


Les informations les plus dtailles descendent au niveau de l'tablissement. En attribuantuneURLchaquetablissementetenpubliantlesinformationsconcernant l'tablissementcetteadresse,onraliseraitunemeilleureintgrationdusystmesurle Web.

POST ou GET pour les interrogations?


Danslamesureolesinterrogationssontdesoprationssres(sanseffetdebord) leursmantiqueserapproched'avantagedecelled'unemthodeGET.L'utilisationde GET interdirait d'exprimer l'interrogation sous forme d'un document XML, mais elle donneraituneURLchaquerequteetrendraitlesystmefacilementutilisableavecun simplenavigateurWeb.

EXEMPLE : SONDAGES XMLFR


Distribu et accessible en XSLT
ParmilecahierdeschargesdusystmedegestiondessondagesdeXMLfr,cesystme devaittredistribusurdeuxmachineset,XMLfrtantimplmentenXSLT,ildevait trefacilementaccessiblepartirdeXSLT.

Service Web utilisant HTTP GET


La solution technique retenue est une implmentation sous forme de service web utilisantdesmthodesHTTPGETetrenvoyantlesrsultatssousformededocuments XML(http://xmlfr.org/documentations/articles/0211150002). La transformation XSLT constitue l'adresse appeler en fonction des informations saisiesparlesutilisateursetappelleletraitementenutilisantlafonctiondocument(). Eric van der Vlist (vdv@dyomedea.com) REST-- WS Convention 2004 -Page 8

Cette solution prsente donc le gros avantage d'tre immdiatement intgrable dans l'architectureXSLTdusiteXMLfr.

Pourrait tre plus REST


En utilisant une mthode POST ou PUT pour le vote
Lefaitd'utiliserunemthodeGETpourlevoteafacilitl'intgrationdansXSLT,maisla smantique d'un vote est plus prochede celle d'une mthode POST ou PUT puisqu'il s'agitd'envoyeruneinformationauserveur. CetcartuneutilisationoptimaledeHTTPsembledoncleprixpayerpourlafacilit d'intgrationXSLT.

REST ET GESTION DES TATS


Exemples de Paul Prescod et des Monty Python
LaquestionlaplusfrquenteproposdeRESTestsansaucundoutecelledelagestion destats et Paul Prescod en a fourniune trs bonne dmonstration dansune de ses publications(http://www.prescod.net/rest/state_transition.html). Sonexemplereprendl'preuvedupassagedepontdelamortdanslaqutedugraaldes MontyPython...

Gestion des tats dans les URL


Initialisation
Lepremierchangeestjusteunephased'initialisationdcrivantcequivasepasserpar lasuite:

Eric van der Vlist (vdv@dyomedea.com)

REST-- WS Convention 2004 --

Page 9

--> GET /cross_bridge <-200 OK <challenge><p>Stop! Who would cross the Bridge of Death must answer me these questions three, ere the other side he see. Do you agree?</p> If so, <method>GET</method> your next question from <uri>/questions/name_question</uri></challenge>

Premire question
Lapremirequestioncontientladescriptiondelaquestionainsiqu'uneindicationsurla maniredepoursuivrel'change: --> GET /questions/name_question <-200 OK <challenge> <p>Very well. What... is your name?</p> <method>GET</method> the next question by combining your answer with this URI: <uri>/questions/quest_question</uri> </challenge>

Deuxime question
Suivant les instructions donnes dans l'change prcdant, la rponse la premire question est transmise dans l'URL demandant la deuxime question. Comme la premire,ladeuximequestioncontientladescriptiondelaquestionetuneindication surlamaniredepoursuivreleschanges.

Eric van der Vlist (vdv@dyomedea.com)

REST-- WS Convention 2004 --

Page 10

--> GET /questions/quest_question?name=Sir+Launcelot+of+Camelot <-200 OK <challenge"> <p>What... is your quest? <method>GET</method> the next question by combining your answer with this URI: <uri>/questions/hard_question?name=Sir+Launcelot+of+Camelot</uri></c hallenge>

Troisime question
Latroisimequestionsuitlemmeprincipe(patience,nousapprochonsdubut)... --> GET /questions/hard_question?name=Sir+Launcelot+of+Camelot &quest=To+Seek+The+Holy+Grail <-200 OK <challenge> <p>What... is the air-speed velocity of an unladen swallow? <method>GET</method> the next question by combining your answer with <uri>/questions/hard_question?name=Sir+Launcelot+of+Camelot &quest=To+Seek+The+Holy+Grail</uri></challen ge>

Rponse finale
Larponsefinalesefaitsurlemmeprincipeetl'onnotequePaulPrescodvajusqu' utiliseruncodeerreurHTTPspcifiquepoursignifierquelarponseesterrone.

Eric van der Vlist (vdv@dyomedea.com)

REST-- WS Convention 2004 --

Page 11

--> GET /questions/hard_question?name=Sir+Launcelot+of+Camelot &quest=To+Seek+The+Holy+Grail&air_speed=unknown <-406 Not Acceptable <p>Answer not correct!</p>

L'tat n'est stock ni sur le serveur ni sur le client


Undesavantagesdecettestratgieestquel'tatn'eststocknisurleserveurnisurle client.Iln'yadoncaucuneffetdebordpuisquelecontexteesttransfrentreleclientet leserveurchaquechange.

Bien adapt des contextes peu volumineux


Ce mcanisme lgant est facile mettre en oeuvre et bien adapt dans le cas de contextespeuvolumineux.

Stockage de l'tat sur le serveur


Autoris en faisant bon usage de HTTP
RESTn'interditpasdestockerl'tatsurleserveurmaisrecommandedanscecasdefaire bonusagedeHTTPetnotammentd'utiliserlesmthodessuivantleursmantique.

Initialisation
Le dialogue s'engage de manire similaire ce que nous avons dj vu, mais l'on demandeauclientd'utiliserunemthodePOSTpourpublierlaconfirmationdeson engagementdanscetchange.

Eric van der Vlist (vdv@dyomedea.com)

REST-- WS Convention 2004 --

Page 12

--> GET /cross_bridge <-200 OK <challenge><p>Stop! Who would cross the Bridge of Death must answer me these questions three, ere the other side he see. Do you agree?</p> <method>POST</method> your answer in <uri>/sessions</uri></challenge>

Premire question
Lorsquelaconfirmationestposte,leserveurrpondenindiquantl'adresselaquelle elle serait disponible pour consultation et engage poster la rponse la premire question: --> POST /sessions <answer continue="true">Ask me the questions, bridgekeeper. I am not afraid.</p> <-201 Created Location: /sessions/42 <challenge session="/sessions/42"> <p>Very well. What... is your name?</p> <method>PUT</method> your answer in <uri>/sessions/42/name</uri> </challenge>

Rponse la premire question


PaulPrescodproposededissocierlarponselapremirequestiondelademandedela deuximequestion:

Eric van der Vlist (vdv@dyomedea.com)

REST-- WS Convention 2004 --

Page 13

--> PUT /sessions/42/name <answer continue="true">My name is 'Sir Launcelot of Camelot'</answer> <-201 Created Location: /sessions/42/name ... Ici,/sessions/42/nameestl'adresselaquellelenompourraittreconsultoumodifiet ilneseraitpastrspropred'utilisercetteadressepourpublierladeuximequestion.

Deuxime question
Ladeuximequestionestcommuniqueparunnouvelaccs/sessions/42: --> GET /sessions/42 <-200 OK <challenge session="/sessions/42"> <name href="/sessions/42/name"/>, <p>what... is your quest? <method>PUT</method> your answer in <uri>/sessions/42/quest</uri></challenge> Ilyadoncbiengestiond'untatauniveauduserveurpuisqueledocumentrenvoy l'adresse /sessions/42 dpend des documents dj posts sur le serveur. Ce n'est pas interdit par REST dans la mesure o nous avons utilis les diffrentes mthodes conformmentleursmantique. Notons galement que pour faciliter les dveloppements, la session donne toutes les informationsncessairespourrcuprerlesinformations.

Rponse la deuxime question et troisime question


Nousavonsmontrcommentdissocierlarponseetl'interrogationdelasession,mais HTTPn'interditpasderenvoyerladescriptiondelasessionenrponseunPUTet nouspouvonslefairepouroptimiserledialogue:

Eric van der Vlist (vdv@dyomedea.com)

REST-- WS Convention 2004 --

Page 14

--> PUT /sessions/42/quest <answer continue="true">To seek the Holy Grail.</answer> <-201 Created Location: /sessions/42/quest <challenge session="/sessions/42"> <name href="/sessions/42/name"/>, <quest href="/quest="/sessions/42/quest"/> <p>What... is the air-speed velocity of an unladen swallow? <method>PUT</method> your answer in <uri>/sessions/42/hard_question</uri></challenge>

Dernire rponse
--> PUT /sessions/42/hard_question <answer continue="confused">Err....What do you mean? An African or European swallow?</answer> <-406 Not Acceptable <p>Answer not correct!</p>

L'tat est proprement gr par le serveur


L'tat est stock et gr par le serveur conformment aux principes REST et en respectantlasmantiquedesmthodesHTTP.

La session a son URL


ChaquesessionasonURL(dontladuredeviepeuttrelimite)etl'interrogationde cetteURLpermetdeconnatreendtaill'tatdelasession.

Chaque rponse a son URL


ChaquerponseagalementsonURLquipeuttreconsultepourvrification.

Cet exemple est gnralisable


Cet exemple est facilement gnralisable, par exemple celui d'une gestion de commandes. Eric van der Vlist (vdv@dyomedea.com) REST-- WS Convention 2004 -Page 15

Eric van der Vlist (vdv@dyomedea.com)

REST-- WS Convention 2004 --

Page 16