Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

index.html 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <!doctype html>
  2. <html lang=fr>
  3. <head>
  4. <!-- Always define the charset before the title -->
  5. <meta charset=utf-8>
  6. <title>★ Django-ROA, pour une architecture orientée ressources — Biologeek — David Larlet</title>
  7. <!-- Define a viewport to mobile devices to use - telling the browser to assume that the page is as wide as the device (width=device-width) and setting the initial page zoom level to be 1 (initial-scale=1.0) -->
  8. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  9. <!-- Fake favicon, to avoid extra request to the server -->
  10. <link rel="icon" href="data:;base64,iVBORw0KGgo=">
  11. <link type="application/atom+xml" rel="alternate" title="Feed" href="/david/log/" />
  12. <link rel="manifest" href="/manifest.json">
  13. <link rel="stylesheet" href="/static/david/css/larlet-david-_J6Rv.css" data-instant-track />
  14. <noscript>
  15. <style type="text/css">
  16. /* Otherwise fonts are loaded by JS for faster initial rendering. See scripts at the bottom. */
  17. body {
  18. font-family: 'EquityTextB', serif;
  19. }
  20. h1, h2, h3, h4, h5, h6, time, nav a, nav a:link, nav a:visited {
  21. font-family: 'EquityCapsB', sans-serif;
  22. font-variant: normal;
  23. }
  24. </style>
  25. </noscript>
  26. <!-- Canonical URL for SEO purposes -->
  27. <link rel="canonical" href="https://larlet.fr/david/biologeek/archives/20090526-django-roa-pour-une-architecture-orientee-ressources">
  28. </head>
  29. <body>
  30. <div>
  31. <header>
  32. <nav>
  33. <p>
  34. <small>
  35. Je suis <a href="/david/" title="Profil public">David Larlet</a>, <a href="/david/pro/" title="Activité professionnelle">artisan</a> du web qui vous <a href="/david/pro/accompagnement/" title="Activité d’accompagnement">accompagne</a><span class="more-infos"> dans l’acquisition de savoirs pour concevoir des <a href="/david/pro/produits-essentiels/" title="Qu’est-ce qu’un produit essentiel ?">produits essentiels</a></span>. <span class="more-more-infos">Discutons ensemble d’une <a href="/david/pro/devis/" title="En savoir plus">non-demande de devis</a>.</span> Je partage ici mes <a href="/david/blog/" title="Expériences bienveillantes">réflexions</a> et <a href="/david/correspondances/2017/" title="Lettres hebdomadaires">correspondances</a>.
  36. </small>
  37. </p>
  38. </nav>
  39. </header>
  40. <section>
  41. <h1 property="schema:name">★ Django-ROA, pour une architecture orientée ressources</h1>
  42. <article typeof="schema:BlogPosting">
  43. <div property="schema:articleBody">
  44. <img src="/static/david/biologeek/images/logos/django_pony.png" alt="vignette" style="float:left; margin: 0.5em 1em;" property="schema:thumbnailUrl" />
  45. <p>Il y a un projet sur lequel je travaille depuis un moment maintenant dans le cadre de mes prestations et que j'ai décidé de libérer (sous licence BSD) car je pense qu'il peut être utile à pas mal de monde : <a href="http://code.welldev.org/django-roa/">Django-ROA</a>.</p>
  46. <h2>Qu'est-ce que ça fait ?</h2>
  47. <p><strong>Il s'agit de pouvoir gérer ses ressources distantes normalement accessibles en REST directement via l'ORM et les modèles de Django</strong>. Le module va s'occuper (comme le montre le merveilleux schéma ci-dessous) de convertir la requête Django initiale en une requête HTTP et de convertir/déserializer la réponse en un objet Django :</p>
  48. <p>
  49. <img
  50. src="/static/david/biologeek/images/django-roa-diagram-petit.png"
  51. alt="Django-ROA diagram"
  52. style="margin: 0pt auto; display: block;"/>
  53. </p>
  54. <p>Ok pour le fonctionnement mais qu'en est-il des applications ?</p>
  55. <p>Le module a originellement été développé pour s'intégrer dans les architectures orientées services (SOA) ayant une contrainte REST (d'où le <a href="https://larlet.fr/david/biologeek/archives/20070629-architecture-orientee-ressource-pour-faire-des-services-web-restful/">ROA</a>). Cela signifie que vous pouvez brancher votre application sur une base de données métier sous réserve qu'elle ait une interface HTTP. <strong>Ce qui ouvre la porte aux bases non supportées par Django nativement, aux entrepôts de données et aux multi-databases</strong> puisque vous pouvez spécifier une URI par modèle... Soyons encore plus fous, CouchDB parle le HTTP, et bien il suffirait d'un connecteur approprié pour pouvoir accéder aux documents via des modèles Django !</p>
  56. <p>Lors d'<a href="http://euro.djangocon.org/">EuroDjangoCon</a>, <a href="http://noehr.org/">Jesper</a> venait de sortir <a href="http://bitbucket.org/jespern/django-piston/">django-piston</a> (qui est utilisé pour les tests de <a href="http://code.welldev.org/django-roa/">django-roa</a>) et faisait des tests d'application sur <a href="http://pinaxproject.com/">Pinax</a>. J'ai pu vérifier en communiquant avec l'API mise en place sur sa machine que je pouvais éditer des objets Pinax via une interface d'administration de Django qui était lancée sur ma machine. Ce qui signifie que l'<strong>on pourrait imaginer une interface d'administration commune à plusieurs projets</strong> (pas forcément Django) présentant des API.</p>
  57. <p>Si vous avez d'autres idées d'applications, n'hésitez pas à laisser libre cours à votre imagination. Je n'ai pas parlé de RDF mais vous pensez bien que ce module est une partie intégrante de ce que j'ai appelé <a href="https://larlet.fr/david/biologeek/archives/20080604-architecture-web-moderne-et-agile/">architecture moderne et agile</a> ;-).</p>
  58. <h2>Comment l'utiliser ?</h2>
  59. <p>Je ne vais pas reproduire la doc ici mais c'est relativement simple, il suffit d'hériter du <strong>Model</strong> de django-roa et de définir l'URL de la ressource avec la méthode <strong>get_resource_url_list</strong>.</p>
  60. <p>Après, il y a beaucoup de <strong>settings</strong> et méthodes pour configurer tout ça, le plus intéressant pour découvrir le module est probablement <strong>ROA_MODELS</strong> qui permet de passer facilement d'une architecture locale (pour développer) à une architecture orientée ressources (pour tester grandeur nature). Sinon la lecture des tests peut être d'une grande aide.</p>
  61. <p>Notez qu'il est nécessaire de patcher Django (du moins pour l'instant) avec <a href="http://code.djangoproject.com/ticket/10109">le patch lié au ticket #10109</a> pour pouvoir utiliser le module avec les relations ManyToMany.</p>
  62. <h2>Comment participer ?</h2>
  63. <p>En testant le module dans un premier temps, en enrichissant <a href="http://code.welldev.org/django-roa/wiki/Home">la documentation</a> au besoin (je peux facilement vous laisser des droits si vous avez un compte BitBucket), en proposant des patchs ou tout simplement en discutant des concepts.</p>
  64. <p>J'aurais le plaisir d'en présenter brièvement les détails <a href="http://pycon.fr/">lors de Pycon-fr</a> (dimanche après-midi) où j'espère vous retrouver nombreux. Il y aura aussi un atelier Django le samedi après-midi pour ceux et celles qui voudraient s'y mettre !</p>
  65. </div>
  66. </article>
  67. <footer>
  68. <h6 property="schema:datePublished">— 26/05/2009</h6>
  69. </footer>
  70. </section>
  71. <section>
  72. <div>
  73. <h3>Articles peut-être en rapport</h3>
  74. <ul>
  75. <li><a href="/david/biologeek/archives/20100121-rencontres-django-marseille-le-we-du-2425-avril/" title="Accès à Rencontres Django à Marseille le WE du 24/25 avril">Rencontres Django à Marseille le WE du 24/25 avril</a></li>
  76. <li><a href="/david/biologeek/archives/20091211-pourquoi-python-et-django/" title="Accès à ★ Pourquoi Python et Django">★ Pourquoi Python et Django</a></li>
  77. <li><a href="/david/biologeek/archives/20080211-astuces-et-bonnes-pratiques-django/" title="Accès à ★ Astuces et bonnes pratiques Django">★ Astuces et bonnes pratiques Django</a></li>
  78. </ul>
  79. </div>
  80. </section>
  81. <section>
  82. <div id="comments">
  83. <h3>Commentaires</h3>
  84. <div class="comment" typeof="schema:UserComments">
  85. <p class="comment-meta">
  86. <span class="comment-author" property="schema:creator">NiKo</span> le <span class="comment-date" property="schema:commentTime">26/05/2009</span> :
  87. </p>
  88. <div class="comment-content" property="schema:commentText">
  89. <p>Tu devrais publier ça en anglais !</p>
  90. </div>
  91. </div>
  92. <div class="comment" typeof="schema:UserComments">
  93. <p class="comment-meta">
  94. <span class="comment-author" property="schema:creator">Wim Leers</span> le <span class="comment-date" property="schema:commentTime">26/05/2009</span> :
  95. </p>
  96. <div class="comment-content" property="schema:commentText">
  97. <p>Premièrement: le Django pony, c&#39;est magnifique! :D J&#39;aimerais que la communauté de Drupal avais une telle pony irrésistible :) :P</p>
  98. <p>Puis, c&#39;est un projet que vraiment ouvre des nouvelles portes. Je ne sais pas beaucoup (ni assez) à être suffisamment capable de juger ceci, mais ça semble impressionnant!</p>
  99. <p>P.S.: Je m&#39;excuse pour mon français terrible, il y a eu trop longtemps que j&#39;ai pu la pratiquer :(</p>
  100. </div>
  101. </div>
  102. <div class="comment" typeof="schema:UserComments">
  103. <p class="comment-meta">
  104. <span class="comment-author" property="schema:creator">汇率网</span> le <span class="comment-date" property="schema:commentTime">26/05/2009</span> :
  105. </p>
  106. <div class="comment-content" property="schema:commentText">
  107. <p>Django rocks!</p>
  108. </div>
  109. </div>
  110. <div class="comment" typeof="schema:UserComments">
  111. <p class="comment-meta">
  112. <span class="comment-author" property="schema:creator">David, biologeek</span> le <span class="comment-date" property="schema:commentTime">26/05/2009</span> :
  113. </p>
  114. <div class="comment-content" property="schema:commentText">
  115. <p>@NiKo : j&#39;ai fait mon possible pour diffuser aussi l&#39;info en anglais mais je voudrais rester en français ici :(</p>
  116. <p>@Wim Leers : Merci pour l&#39;effort d&#39;avoir écrit en français ! Il faut l&#39;essayer pour se faire une idée du potentiel à mon avis.</p>
  117. <p>@汇率网 : indeed ;)</p>
  118. </div>
  119. </div>
  120. <div class="comment" typeof="schema:UserComments">
  121. <p class="comment-meta">
  122. <span class="comment-author" property="schema:creator">Gilles</span> le <span class="comment-date" property="schema:commentTime">26/05/2009</span> :
  123. </p>
  124. <div class="comment-content" property="schema:commentText">
  125. <p>T&#39;es un dieu du poney ! *Super boulot*.</p>
  126. </div>
  127. </div>
  128. <div class="comment" typeof="schema:UserComments">
  129. <p class="comment-meta">
  130. <span class="comment-author" property="schema:creator">nautilebleu</span> le <span class="comment-date" property="schema:commentTime">26/05/2009</span> :
  131. </p>
  132. <div class="comment-content" property="schema:commentText">
  133. <p>Une tendance du déploiement web actuel est me semble-t-il de remplacer de gros sites monolithiques par plusieurs petits sites (~ un projet django), car c&#39;est plus facile à développer, plus simple à maintenir (système de droit plus simples, volumes de données à servir, etc) Mais parfois on a aussi besoin d&#39;avoir une vue d&#39;ensemble, notamment pour les administrateurs. J&#39;aime donc assez bien l&#39;idée de &quot;méta-admin&quot;</p>
  134. </div>
  135. </div>
  136. <div class="comment" typeof="schema:UserComments">
  137. <p class="comment-meta">
  138. <span class="comment-author" property="schema:creator">Martin Catty</span> le <span class="comment-date" property="schema:commentTime">26/05/2009</span> :
  139. </p>
  140. <div class="comment-content" property="schema:commentText">
  141. <p>Si j&#39;ai bien compris, c&#39;est l&#39;équivalent d&#39;ActiveResource qu&#39;on utilise avec Ruby on Rails.</p>
  142. <p>Quand on commence à y goûter on ne veut plus faire que des archis orientées ressources.</p>
  143. <p>Beau boulot en tout cas.</p>
  144. </div>
  145. </div>
  146. <div class="comment" typeof="schema:UserComments">
  147. <p class="comment-meta">
  148. <span class="comment-author" property="schema:creator">David, biologeek</span> le <span class="comment-date" property="schema:commentTime">26/05/2009</span> :
  149. </p>
  150. <div class="comment-content" property="schema:commentText">
  151. <p>@Gilles : wow, merci :)</p>
  152. <p>@nautilebleu : oui, c&#39;est d&#39;ailleurs avec ce cas d&#39;utilisation qu&#39;a été développé django-roa (appli monolithique à scinder). Et effectivement, c&#39;est ce que Joe Stump a répondu lors d&#39;EuroDjangoCon lorsqu&#39;on lui a demandé comment est-ce qu&#39;il voyait l&#39;évolution de Django : comme un tableau de contrôle.</p>
  153. <p>@Martin Catty : oui je viens de re-jeter un œil à ActiveResource et c&#39;est très proche en effet, d&#39;ailleurs je vais voir comment ils ont résolu certains problèmes auxquels je suis confronté ;)</p>
  154. </div>
  155. </div>
  156. <div class="comment" typeof="schema:UserComments">
  157. <p class="comment-meta">
  158. <span class="comment-author" property="schema:creator">david</span> le <span class="comment-date" property="schema:commentTime">26/05/2009</span> :
  159. </p>
  160. <div class="comment-content" property="schema:commentText">
  161. <p>beau boulot en effet.<br />je vote pour la traduction anglaise</p>
  162. <p>et également pour un portage app engine ;-) (certes y a du boulot avec les foreign keys ;-)</p>
  163. </div>
  164. </div>
  165. <div class="comment" typeof="schema:UserComments">
  166. <p class="comment-meta">
  167. <span class="comment-author" property="schema:creator">汇率计算器</span> le <span class="comment-date" property="schema:commentTime">27/05/2009</span> :
  168. </p>
  169. <div class="comment-content" property="schema:commentText">
  170. <p>Nice article about django.</p>
  171. </div>
  172. </div>
  173. <div class="comment" typeof="schema:UserComments">
  174. <p class="comment-meta">
  175. <span class="comment-author" property="schema:creator">Troll</span> le <span class="comment-date" property="schema:commentTime">04/11/2009</span> :
  176. </p>
  177. <div class="comment-content" property="schema:commentText">
  178. <p>&quot;...c&#39;est ce que Joe Stump a répondu lors...&quot;</p>
  179. <p>Joe Stump ? Le guitariste copié/collé d&#39;Yngwie Malmsteen ? Ok je sors...</p>
  180. </div>
  181. </div>
  182. <div class="comment" typeof="schema:UserComments">
  183. <p class="comment-meta">
  184. <span class="comment-author" property="schema:creator">Jean-André Santoni</span> le <span class="comment-date" property="schema:commentTime">05/01/2010</span> :
  185. </p>
  186. <div class="comment-content" property="schema:commentText">
  187. <p>J&#39;ai eu l&#39;occasion de tester Django-ROA, c&#39;est impressionnant ! Je suis impatient de la sortie du prochain pony (Django-ROA sur un store RDF).</p>
  188. <p>D&#39;après vous, serait il facile d&#39;introduire du versionning dans Django-ROA ? J&#39;entend par là permettre au client de stocker localement des entrées, et de pouvoir les proposer au serveur (ou pas).</p>
  189. <p>J&#39;ai croisé plusieurs projets (OpenAnzo et SemVersion) qui permettent de faire du versionning sur un store RDF. C&#39;est justement ce que je cherche à faire avec Django.</p>
  190. </div>
  191. </div>
  192. <div class="comment" typeof="schema:UserComments">
  193. <p class="comment-meta">
  194. <span class="comment-author" property="schema:creator">David, biologeek</span> le <span class="comment-date" property="schema:commentTime">05/01/2010</span> :
  195. </p>
  196. <div class="comment-content" property="schema:commentText">
  197. <p>@Jean-André Santoni : merci pour ce retour ! :-)</p>
  198. <p>Concernant le store RDF, il y a des personnes qui s&#39;y intéressent de près dernièrement pour pouvoir parler à Virtuoso notamment. De mon côté je bataille pour rendre ROA compatible Django 1.2.</p>
  199. <p>Pour le versionning, je ne me suis pas posé la question, il faudrait que je regarde comment ces projets fonctionnent. En tout cas si tu as des propositions de patchs pour faciliter ça, n&#39;hésite pas !</p>
  200. </div>
  201. </div>
  202. </div>
  203. </section>
  204. <footer>
  205. <nav>
  206. <p>
  207. <small>
  208. Je réponds quasiment toujours aux <a href="m&#x61;ilto:d&#x61;vid%40l&#x61;rlet&#46;fr" title="Envoyer un email">emails</a> (<a href="/david/signature/" title="Ma signature actuelle avec possibilité de chiffrement">signés</a>) et vous pouvez me rencontrer à Montréal. <span class="more-infos">N’hésitez pas à <a href="/david/log/" title="Être tenu informé des mises à jour">vous abonner</a> pour être tenu informé des publications récentes.</span>
  209. </small>
  210. </p>
  211. </nav>
  212. </footer>
  213. </div>
  214. <script src="/static/david/js/larlet-david-3ee43f.js" data-no-instant></script>
  215. <script data-no-instant>InstantClick.init()</script>
  216. </body>
  217. </html>