Architecture RESTFul 0
REST: REpresentationnal State Transfer
Style d’architecture RESTful
REST se définit comme un style d’architecture pour des systèmes distribués.
Au centre de ces concepts, il y a la notion de ressources identifiées par un URI ( Universal Resource Identifier).
La ressource peut être mainipulée en utilisant une interface http standard, et des informations sont échangées en utilisant des representations de cette ressource.
Les RESTful Web Services sont construits en utilisant ce style d’architecture. Cette approche devient une alternative de plus en plus répandue à l’approche SOAP.
Un bon exemple vaut mieux qu’un long discour
Par exemple à la requête http GET:
http://localhost:8080/bgREST/resources/formationReservations/1
On aura la réponse (Si l’on accepte les documents xml,mais si l’on accepte les documents json, on aura la même ressource au format json):
- <?xml version="1.0" encoding="UTF-8"?> version="1.0" encoding="UTF-8" standalone="yes"
- <formationReservation uri="http://localhost:8080/bgREST/resources/formationReservations/1/">
- <company>SQLI</company>
- <dateFormation>2008-12-14T00:00:00+01:00</dateFormation>
- <id>1</id>
- <name>Pierre</name>
- <nbEleves>2</nbEleves>
- </formationReservation>
wadl : Web Application Description Language
Le wadl permet de décrire un Web Service de style RESTful dans un fichier xml.
Ils sont similaires aux fichiers wsdl qui sont destinés à décrire les Web Services de type SOAP.
Les fichiers wadl sont en général générés automatiquement par les outils qui construisent les Web Services.
D’autres outils (wadl2java) permettent de générer du code dans un langage de programmation pour inter-réagir avec un Web Service.
Cette approche , qui tente de reproduire ce qui se fait dans le monde WS-* est critiquée : http://bitworking.org/news/193/Do-we-need-WADL
Dans notre exemple, pour la requete:
http://localhost:8080/bgREST/resources/application.wadl
Voilà le wadl:
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- <application xmlns="http://research.sun.com/wadl/2006/10">
- <doc xmlns:jersey="http://jersey.dev.java.net/" jersey:generatedBy="Jersey: 1.0 10/13/2008 12:27 PM"/>
- <resources base="http://localhost:8080/bgREST/resources/">
- <resource path="/formationReservations/">
- <method name="GET" id="get">
- <request>
- <param xmlns:xs="http://www.w3.org/2001/XMLSchema" default="0" type="xs:int" style="query" name="start"/>
- <param xmlns:xs="http://www.w3.org/2001/XMLSchema" default="10" type="xs:int" style="query" name="max"/>
- <param xmlns:xs="http://www.w3.org/2001/XMLSchema" default="1" type="xs:int" style="query" name="expandLevel"/>
- <param xmlns:xs="http://www.w3.org/2001/XMLSchema" default="SELECT e FROM FormationReservation e" type="xs:string" style="query" name="query"/>
- </request>
- <response>
- <representation mediaType="application/xml"/>
- <representation mediaType="application/json"/>
- </response>
- </method>
- <method name="POST" id="post">
- <request>
- <representation mediaType="application/xml"/>
- <representation mediaType="application/json"/>
- </request>
- <response>
- <representation mediaType="*/*"/>
- </response>
- </method>
- <resource path="{id}/">
- <param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:long" style="template" name="id"/>
- <method name="GET" id="get">
- <request>
- <param xmlns:xs="http://www.w3.org/2001/XMLSchema" default="1" type="xs:int" style="query" name="expandLevel"/>
- </request>
- <response>
- <representation mediaType="application/xml"/>
- <representation mediaType="application/json"/>
- </response>
- </method>
- <method name="PUT" id="put">
- <request>
- <representation mediaType="application/xml"/>
- <representation mediaType="application/json"/>
- </request>
- </method>
- <method name="DELETE" id="delete"/>
- </resource>
- </resource>
- </resources>
- </application>
Liste des ressources
Pour la requête :
- http://localhost:8080/bgREST/resources/formationReservations
On optient la liste des ressources :
- <?xml version="1.0" encoding="UTF-8"?> version="1.0" encoding="UTF-8" standalone="yes"
- <formationReservations uri="http://localhost:8080/bgREST/resources/formationReservations/">
- <formationReservation uri="http://localhost:8080/bgREST/resources/formationReservations/1/">
- <company>SQLI</company>
- <dateFormation>2008-12-14T00:00:00+01:00</dateFormation>
- <id>1</id>
- <name>Pierre</name>
- <nbEleves>2</nbEleves>
- </formationReservation>
- <formationReservation uri="http://localhost:8080/bgREST/resources/formationReservations/2/">
- <company>ebay</company>
- <dateFormation>2008-12-14T00:00:00+01:00</dateFormation>
- <id>2</id>
- <name>Jacques</name>
- <nbEleves>4</nbEleves>
- </formationReservation>
- <formationReservation uri="http://localhost:8080/bgREST/resources/formationReservations/3/">
- <company>airbus</company>
- <dateFormation>2008-12-14T00:00:00+01:00</dateFormation>
- <id>3</id>
- <name>Paul</name>
- <nbEleves>1</nbEleves>
- </formationReservation>
- </formationReservations>
REST et java
La JSR 311 , JAX-RS a comme implementation jersey (Proposé par SUN)
REST et netbeans
Netbeans supporte un certain nombre de fonctionnalités permettant de très rapidement concevoir, déployer et tester des Web Services RESTful.
















