<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Robusta : Java &#38; RESTful Web Services &#187; RESTful</title>
	<atom:link href="https://blog.developpez.com/java_rest/pcategory/restful/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/java_rest</link>
	<description></description>
	<lastBuildDate>Fri, 24 Dec 2010 11:23:17 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Robusta Web Toolkit : Un peu de Buzz pour REST &amp; Java</title>
		<link>https://blog.developpez.com/java_rest/p7757/restful/robusta_web_toolkit_un_peu_de_buzz_pour</link>
		<comments>https://blog.developpez.com/java_rest/p7757/restful/robusta_web_toolkit_un_peu_de_buzz_pour#comments</comments>
		<pubDate>Wed, 17 Jun 2009 10:07:09 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RESTful]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Je finis cette semaine une première version public de Robusta Web Toolkit (RWT). Cette bibliothèque s&#8217;est construite au fil des trois dernières années lors de la construction d&#8217;Edupassion.com. Depuis un peu plus d&#8217;un an, l&#8217;architecture d&#8217;Edupassion est passée RESTful et j&#8217;ai décidé d&#8217;épurer la biblitohèque afin de fournir un ensemble d&#8217;outils légers et cohérents facilitant les usages fréquents lors d&#8217;un processus REST. Simplicité et Productivités sont (en principe ) les maîtres mots. Le premier tutoriel [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Je finis cette semaine une première version public de <a href="http://www.robustaweb.com">Robusta Web Toolkit</a> (RWT). Cette bibliothèque s&rsquo;est construite au fil des trois dernières années lors de la construction d&rsquo;<a href="http://www.edupassion.com">Edupassion.com</a>.</p>
<p>Depuis un peu plus d&rsquo;un an, l&rsquo;architecture d&rsquo;Edupassion est passée RESTful et j&rsquo;ai décidé d&rsquo;épurer la biblitohèque afin de fournir <strong>un ensemble d&rsquo;outils légers et cohérents facilitant les usages fréquents lors d&rsquo;un processus REST</strong>. Simplicité et Productivités sont (en principe <img src="https://blog.developpez.com/java_rest/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> ) les maîtres mots.</p>
<p>Le <a href="http://nicolas-zozol.developpez.com/tutoriels/java/robusta-web-toolkit/">premier tutoriel</a> est en cours d&rsquo;écriture, et RWT est téléchargeable <strong>dans une version qui évoluera encore</strong> un peu, l&rsquo;essentiel du travail restant étant d&rsquo;écrire une documentation convenable.</p>
<p>Vous pouvez toutefois vous amuser avec :</p>
<ul>
<li><a href="http://robustaweb.com/toolkit/javadoc/robusta/xml/VerySimpleXml.html">VerySimpleXml </a>pour SAX (RwtSax) ou JDOM (RwtJdom)</li>
<li>Les classes utilitaires <a href="http://robustaweb.com/toolkit/javadoc/robusta/commons/util/Couple.html">Couple </a>et <a href="http://robustaweb.com/toolkit/javadoc/robusta/commons/util/CoupleList.html">CoupleList</a></li>
<li>Des <a href="http://robustaweb.com/toolkit/javadoc/robusta/rest/RestfulClient.html">Clients Http</a> simplifié et spécialisés, à partir du Client Sun (<a href="http://robustaweb.com/toolkit/javadoc/robusta/rest/implementations/RwtSunClient.html">RwtSunClient</a>, idéal pour les applets) ou  du client Apache (<a href="http://robustaweb.com/toolkit/javadoc/robusta/rest/implementations/RwtApacheClient.html">RwtApacheClient</a>)</li>
<li>Un <a href="http://robustaweb.com/toolkit/javadoc/robusta/rest/ResourceController.html">ResourceController </a>pour JAX-RS (<a href="http://robustaweb.com/toolkit/javadoc/robusta/rest/implementations/JaxRsResourceController.html">JaxRsResourceController</a>)</li>
</ul>
<p>La version 0.9 stable et quasi définitive sera disponible au plus tard la semaine prochaine. En espérant des commentaires et peut-être quelques add-on de la communauté pour une version 1.0 en Septembre.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Je pense que je vais m&#8217;arrêter là</title>
		<link>https://blog.developpez.com/java_rest/p6769/restful/je_pense_que_je_vais_m_arreter_la</link>
		<comments>https://blog.developpez.com/java_rest/p6769/restful/je_pense_que_je_vais_m_arreter_la#comments</comments>
		<pubDate>Tue, 11 Nov 2008 15:48:10 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RESTful]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[JPA (Java Persistence API) sera sans doute le dernier de mes joujoux technologiques pour bâtir l&#8217;architecture de la plateforme pédagogique Edupassion.com. Tout cela fait beaucoup de technologies pour un seul homme. Ext-JS risque d&#8217;être le point faible&#8230; et le plus visible. Le projet est donc séparé en 6 modules : Code Browser : HTML reçu par la front view, Ajax vers le web service Front view (Module Edupassion) : Distribution du HTML, redirection au Web [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>JPA (Java Persistence API) sera sans doute le dernier de mes joujoux technologiques pour bâtir l&rsquo;architecture de la plateforme pédagogique <a href="http://www.edupassion.com">Edupassion.com</a>.<br />
<img src="http://nicolas-zozol.developpez.com/blog/images/technos/diagramme.gif" alt="technologies web" title="" /><br />
Tout cela fait beaucoup de technologies pour un seul homme. Ext-JS risque d&rsquo;être le point faible&#8230; et le plus visible.<br />
<span id="more-14"></span><br />
Le projet est donc séparé en 6 modules :
<ul>
<li><strong>Code Browser</strong> : HTML reçu par la front view, Ajax vers le web service</li>
<li><strong>Front view</strong> (Module Edupassion) : Distribution du HTML, redirection au Web Service</li>
<li><strong>Web Service</strong> (module wsedupassion) : http -> JSP -> Javabean -> validation -> accès données -> analyse -> résultat xml</li>
<li><strong>Code métier</strong> (module e-library) : contient les classes School, Teacher, Student, Work, etc.</li>
<li><strong>Accès données</strong> (module JPA+Crud) : Les classes Entities sont générées par Netbeans 6.5. Le Crud convertit ces entities en classes métiers de e-library.</li>
<li><strong>La base de donnée</strong> : On y accède soit par les entities, soit par des requêtes JPA, et parfois par des requêtes jdbc.</li>
</ul>
<p>
<strong>JPA</strong><br />
La seule originalité est la séparation franche entre les Entities issues de la Bdd et les classes métiers qui en sont presque des clones. Mais pour moi il est hors de question de rajouter la moindre ligne au milieu d&rsquo;un code remplit d&rsquo;annotation et de requêtes à mon avis difficile à maintenir.</p>
<p>J&rsquo;apprécie cependant énormément de faire un Crud via ces Entities plutôt que par JDBC. La maintenance est plus simple, puisque, par exemple, en renommant une colonne de ma BDD, Netbeans génèrera des classes différentes et fera remarquer une erreur dans le code de mon CRUD. Cela est impossible avec du JDBC pur.
</p>
<p><strong>REST</strong><br />
L&rsquo;accès aux web service se fait par REST, via des requêtes GET, POST, PUT et DELETE. Il a fallut pour cela modifier le fichier de Prototype, ce qui n&rsquo;est pas très difficile. Un Web Service RESTFul permet principalement une montée en charge du projet sereine, sans modifier le code source.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Servlet-Mapping : Des expressions pas très régulières</title>
		<link>https://blog.developpez.com/java_rest/p6431/restful/servlet_mapping_des_expressions_pas_tres</link>
		<comments>https://blog.developpez.com/java_rest/p6431/restful/servlet_mapping_des_expressions_pas_tres#comments</comments>
		<pubDate>Mon, 22 Sep 2008 19:03:55 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Astuce du Jour]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[RESTful]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Le Servlet Mapping dans un serveur Web permet de rediriger une URL vers un fichier acceptant une requête : une servlet ou une page JSP. Par exemple la requête GET /wsedupassion/account/12 sera redirigé vers la page /wsedupassion/service/account/account.jsp. Cette page JSP sera capable de traduire le &#8217;12&#8217; pour récupérer le compte d&#8217;index 12 et enverra donc sous forme XML les informations lié à l&#8217;utilisateur 12. &#160;&#60;br /&#62; &#60;resource&#62; &#60;br /&#62; &#160; &#60;class&#62;User&#60;/class&#62; &#60;br /&#62; &#160; &#60;id&#62;12&#60;/id&#62; [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Le Servlet Mapping dans un serveur Web permet de rediriger une URL vers un fichier acceptant une requête : une servlet ou une page JSP.<br />
Par exemple la requête <strong>GET /wsedupassion/account/12</strong> sera redirigé vers la page <strong>/wsedupassion/service/account/account.jsp</strong>. Cette page JSP sera capable de traduire le &rsquo;12&rsquo; pour récupérer le compte d&rsquo;index 12 et enverra donc sous forme XML les informations lié à l&rsquo;utilisateur 12.</p>
<p></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;&lt;br /&gt;<br />
&lt;resource&gt; &lt;br /&gt;<br />
&nbsp; &lt;class&gt;User&lt;/class&gt; &lt;br /&gt;<br />
&nbsp; &lt;id&gt;12&lt;/id&gt; &lt;br /&gt;<br />
&nbsp; &lt;lastName&gt;Zozol&lt;/lastName&gt; &lt;br /&gt;<br />
&nbsp; &lt;firstName&gt;Nicolas&lt;/firstName&gt; &lt;br /&gt;<br />
&nbsp; &lt;url&gt;http://www.edupassion.com&lt;/url&gt; &lt;br /&gt;<br />
&nbsp; &lt;subject&gt;Computer Sciences&lt;/subject&gt; &lt;br /&gt;<br />
&nbsp; &lt;school&gt;Robusta Web&lt;/school&gt; &lt;br /&gt;<br />
&lt;/resource&gt; &lt;br /&gt;</div></div>
<p>
<span id="more-2"></span></p>
<p>Mais il y a dans le Domaine d&rsquo;une école, des cas plus complexes que récupérer les informations d&rsquo;un utilisateur. Par exemple récupérer l&rsquo;ensemble des élèves du cours 24. On utilisera la requête :<br />
   <strong>GET /wsedupassion/course/24/students</strong></p>
<p>Pour connaitre le professeur de ce groupe, ce sera :<br />
   <strong>GET /wsedupassion/course/24/teacher</strong></p>
<p>Pour ajouter l&rsquo;étudiant 18 à ce cours:<br />
   <strong>PUT /wsedupassion/course/24/students?idstudent=18</strong></p>
<p>Et pour tout connaitre de ce cours :<br />
   <strong>GET /wsedupassion/course/24/</strong></p>
<p></p>
<p>Et pour traiter ces requête, on utilisera les pages jsp :<br />
   &#8211; /wsedupassion/service/course/course.jsp<br />
   &#8211; /wsedupassion/service/course/teacher.jsp<br />
   &#8211; /wsedupassion/service/course/students.jsp<br />
Le serveur (Apache, Glassfish, JBOSS, &#8230;) doit donc analyser très correctement l&rsquo;uri pour dispatcher vers la bonne JSP. Voici un petit <a href="http://nicolas-zozol.developpez.com/tutoriels/java/restful/jsp/#LIV">tutoriel </a>pour les bases.
</p>
<p>
En première intention, j&rsquo;avais prévu :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;&lt;br /&gt;<br />
&lt;servlet-mapping&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;servlet-name&gt;course&lt;/servlet-name&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;url-pattern&gt;/course/[0-9]+&lt;/url-pattern&gt; &lt;br /&gt;<br />
&lt;/servlet-mapping&gt; &lt;br /&gt;<br />
&lt;servlet-mapping&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;servlet-name&gt;course_students&lt;/servlet-name&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;url-pattern&gt;/course/[0-9]+/students/*&lt;/url-pattern&gt; &lt;br /&gt;<br />
&lt;/servlet-mapping&gt; &lt;br /&gt;<br />
&lt;servlet-mapping&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;servlet-name&gt;course_teacher&lt;/servlet-name&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;url-pattern&gt;/course/[0-9]+/teacher/*&lt;/url-pattern&gt; &lt;br /&gt;<br />
&lt;/servlet-mapping&gt; &lt;br /&gt;</div></div>
<p></p>
<p>Mais les expressions régulières ne sont en fait absolument pas reconnues. Le serveur ne connnait que &lsquo;*&rsquo; et privilégie le pattern selon 4 règles <strong>hierarchiques </strong>from outer space :<br />
  &#8211; Il préfère le pattern exact :<strong>/wsedupassion/account</strong> plutot que <strong>/wsedupassion/*</strong><br />
  &#8211; Il préfère le pattern le plus long : <strong>/course/12/teacher/</strong> plutot <strong>/course/*</strong><br />
  &#8211; Il préfère les<strong> xyz/*</strong> (chemin) plutôt que <strong>*.xzy</strong> (type de fichier)<br />
  &#8211; Il choisit <strong>/</strong> si cette servlet racine existe</p>
<p>Et sinon le serveur envoit l&rsquo;erreur 404( <a href="http://www2.roguewave.com/support/docs/leif/leif/html/bobcatug/7-7.html#772">Source</a>).</p>
<p>
Mon fichier web.xml ressemblera donc à :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;&lt;br /&gt;<br />
&lt;servlet-mapping&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;servlet-name&gt;course&lt;/servlet-name&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;url-pattern&gt;/course*&lt;/url-pattern&gt; &lt;br /&gt;<br />
&lt;/servlet-mapping&gt; &lt;br /&gt;<br />
&lt;servlet-mapping&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;servlet-name&gt;course_students&lt;/servlet-name&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;url-pattern&gt;/course/*/students/*&lt;/url-pattern&gt; &lt;br /&gt;<br />
&lt;/servlet-mapping&gt; &lt;br /&gt;<br />
&lt;servlet-mapping&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;servlet-name&gt;course_teacher&lt;/servlet-name&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;url-pattern&gt;/course/*/teacher/*&lt;/url-pattern&gt; &lt;br /&gt;<br />
&lt;/servlet-mapping&gt;</div></div>
<p>De quoi faire hurler tout prof de fac tatillon sur ses expressions régulières. Mais c&rsquo;est à priori suffisant pour fonctionner, et en plus intuitif. Que demande le peuple ? Apparemment plus, puisque ca ne fonctionne pas. Deux &lsquo;*&rsquo;, ca fait beaucoup.<br />
 <strong>/school/*/student/</strong> n&rsquo;est pas différencié de <strong>/school/*/teacher</strong> et renvoient d&rsquo;ailleurs toutes les deux une erreur 4004 !</p>
<p>Pour dispatcher des uri un peu sophistiquées, il faudrait donc <br />
  &#8211; un servlet-mapping vers un dispatcher<br />
  &#8211; le dispatcher analyse l&rsquo;uri<br />
  &#8211; on forward la requete vers une autre servlet
</p>
<p>
Je n&rsquo;aime pas du tout ce mélange des genres : le servlet mapping a pour objet de rediriger, et devoir faire à la main une redirection dans le processus de redirection via des classes barbares comme un RequestDispatcher. Beurk ! Quelqu&rsquo;un a mieux ?</p>
<p>Sinon, autant garder l&rsquo;uri de la JSP. Et tant pis pour les <a href="http://www.w3.org/Provider/Style/URI">dogmes </a>!</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Un Blog sur le web RESTful</title>
		<link>https://blog.developpez.com/java_rest/p4823/restful/un_blog_sur_le_web_restful</link>
		<comments>https://blog.developpez.com/java_rest/p4823/restful/un_blog_sur_le_web_restful#comments</comments>
		<pubDate>Sun, 20 Jan 2008 16:57:31 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[RESTful]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Les RESTful Web Services sont un des moyens d&#8217;accès à des données par Internet. Supposons que vous demandiez à un serveur l&#8217;ensemble des lycées français présents aux USA : il existe une infinité de façons pour votre navigateur web de faire cette demande, et, pour le serveur, une infinité de façons de vous répondre. Afin de se repérer parmi ces solutions, les programmeurs ont développées plusieurs méthodes plus ou moins standardisées, et notamment des méthodes [&#8230;]]]></description>
				<content:encoded><![CDATA[<div align="justify">
Les <strong>RESTful Web Services</strong> sont un des moyens d&rsquo;accès à des données par Internet. Supposons que vous demandiez à un serveur l&rsquo;ensemble des lycées français présents aux USA : il existe une infinité de façons pour votre navigateur web de faire cette demande, et, pour le serveur, une infinité de façons de vous répondre.<br />
Afin de se repérer parmi ces solutions, les programmeurs ont développées plusieurs méthodes plus ou moins standardisées, et notamment des méthodes appelées RPC, SOAP ou REST. On appellera un Service Web RESTful si il englobe la grande majorité des bons conseils de <a href="http://opikanoba.org/tr/fielding/rest/">Roy T. Fielding</a>, l&rsquo;inventeur de REST.<br />
<em><br />
Quelle est, au premier abord, la distinction de REST ?</em></p>
<p>Lorsque vous faites une requete RPC, SOAP ou REST à un serveur, vous incluez bien sûr par cette requete ce que vous demandez au serveur. En utilisant REST, cette demande est facilement décryptable par un être humain.<br />
Par exemple <code class="codecolorer text default"><span class="text">DELETE edupassion.com/webservice/professeur.jsp?id=12</span></code> effacera le professeur n°12 inscrit à Edupassion.</p>
<p><em><br />
Pourquoi REST ?</em></p>
<table>
<tr align="justify">
<td width="40%">
Les avis entre l&rsquo;utilisation de REST et les méthodes SOAP et RPC sont partagées. Je ne ferais pas un x<sup>e</sup> débat, mais apparemment <a href="http://future.gigaom.com/2007/08/07/web-services-war-is-over-time-to-rest/">REST a gagné la guerre</a>. A mon avis, le principal avantage de REST est de garder un code compréhensible et que l&rsquo;on peut écrire humainement à la main, alors que SOAP requiererait l&rsquo;assistance d&rsquo;un EDI et fournirait par là-même ce que l&rsquo;on appelle du XML Nightmare. Mais comme toute solution, REST et SOAP ont leurs avantages et inconvénients. Le but de ce blog n&rsquo;est donc pas de départager, mais de savoir comment utiliser REST au mieux, selon les situations.
</td>
<td>
<img src="http://nicolas-zozol.developpez.com/blog/Rest_vs_Soap.png" alt="Rest vs SOAP" title="REST et SOAP"  /></td>
</tr>
</table>
<p><em>L&rsquo;environnement du Blog</em></p>
<p>Je donnerai beaucoup d&rsquo;exemples liés au site web <a href="http://www.edupassion.com">Edupassion.com</a> et son framework Robusta que je développe pour mon entreprise Robusta Web. Ce code sera principalement en Java, mais aussi en XML, XSLT, Javascript, JSP, etc. Je publierai aussi de temps en temps l&rsquo;<strong>astuce du jour</strong>, dans n&rsquo;importe quel langage.
</div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
