<?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>Are you agile ? &#187; rest</title>
	<atom:link href="http://www.areyouagile.com/tag/rest/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.areyouagile.com</link>
	<description>Nudge, Nudge, wink wink, n&#039;en dites pas plus</description>
	<lastBuildDate>Sun, 29 Jan 2012 10:46:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Elgg, REST API</title>
		<link>http://www.areyouagile.com/2009/10/elgg-rest-api/</link>
		<comments>http://www.areyouagile.com/2009/10/elgg-rest-api/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 14:57:05 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[technologies]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[elgg]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[rest]]></category>

		<guid isPermaLink="false">http://www.areyouagile.com/?p=212</guid>
		<description><![CDATA[Petit retour sur Elgg. A l&#8217;occasion d&#8217;une petite (mini) mission je me suis penché sur l&#8217;API REST. L&#8217;objectif étant de brancher Elgg et son moteur (engine/lib) en utilisant son API REST à un service WS Soap tiers pour l&#8217;alimenter. En quelques mots : brouillon mais prometteur. Pour rentrer plus précisément sur le sujet je devais [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="margin: 4px;" title="Elgg Rest Api" src="http://www.areyouagile.com/media/image/elgg_logo.jpg" alt="" width="119" height="98" /></p>
<p>Petit retour sur Elgg. A l&#8217;occasion d&#8217;une petite (mini) mission je me suis penché sur l&#8217;API REST. L&#8217;objectif étant de brancher Elgg et son moteur (engine/lib) en utilisant son <a title="Elgg Rest Api" href="http://docs.elgg.org/wiki/API" target="_blank">API REST</a> à un service WS Soap tiers pour l&#8217;alimenter. En quelques mots : brouillon mais prometteur.</p>
<p>Pour rentrer plus précisément sur le sujet je devais générer des groupes dynamiquement en puisant les infos dans un WebService SOAP externe. Ce que mon proto met en avant : il est tout à fait possible d&#8217;&#8221;exposer&#8221; (selon la terminologie elgg) toutes les fonctions liées aux entités de Elgg. C&#8217;est à dire que l&#8217;on rend accessible via une API REST les fonctionnalités des briques de Elgg. Pour cela il faut créer un plugin (du moins je m&#8217;y suis pris ainsi). Créer un plugin c&#8217;est deux coups de cuillère à pot :  un fichier manifest.xml qui dit qui/licence/version, un fichier start.php qui permet de générer ses fonctions et surtout de les enregister au sein du fonctionnement de Elgg. Je n&#8217;ai pas creusé l&#8217;aspect MVC du produit mais après si je regarde les autres plugins tout semble couler assez de source : dossier view, dossier action, etc. Le fait de manipuler les librairies Elgg depuis son infrastructure rend tout plus simple : on accède à toutes les librairies tous les objets/entités, toutes les fonctions. Y&#8217;a plus qu&#8217;à.</p>
<p>Il ressort cependant que l&#8217;API n&#8217;est pas très propre au niveau du codage et que pas mal de petits bugs sont présents.J&#8217;adore à ce sujet le passage du wiki :</p>
<blockquote><p><strong>Note: Elgg&#8217;s REST API has many bugs so developers need to beware that development with it will take longer than expected as you run up against these bugs</strong></p></blockquote>
<p>Par exemple dans mon code, j&#8217;ai eu besoin de faire un accès direct  à  la base de données (ce qui n&#8217;est pas vraiment conseillé&#8230;) l&#8217;API de l&#8217;entité &#8220;group&#8221; ne fonctionnant pas pour l&#8217;attribut <a title="Owner Guid bug " href="http://community.elgg.org/mod/groups/topicposts.php?topic=41488&amp;group_guid=23300" target="_blank">owner_guid</a>.  Enfin j&#8217;ai aussi par exemple supprimé des validations de paramètres dans  l&#8217;API REST qui fonctionnaient de manières incohérentes. Enfin si il semble dans la documentation que les questions  de sécurité soient bien prises en charge, j&#8217;ai eu la surprise de noter  que suite à mon installation on pouvait déclencher la fonctionnalité  sans aucune restriction via un url / méthode GET (alors que j&#8217;avais préparé un  script mettant en place des headers/entêtes http spécifiques pour  palier à cette question d&#8217;authentification). Alors soit c&#8217;est un leurre (la sécurité de l&#8217;API). Soit j&#8217;ai raté un épisode et j&#8217;ai pas compris ou activé la sécurisation de l&#8217;API (la bonne hypothèse probablement). A fouiller donc.</p>
<p>Ces divers désagréments ne sont cependant pas bloquants. Elgg et son &#8220;engine&#8221; et API REST sont très prometteurs. Le code va aller en  s&#8217;améliorant, il est déjà correct. Les questions de sécurité peuvent être traitées à un autre niveau : sécurisation des urls REST via Apache par exemple.</p>
<p>Pour tout cela il s&#8217;agit de développement php/mysql relativement classique, donc efficace et productif. Il faut cependant mettre un bémol sur cette productivité en raison de la jeunesse de la plate-forme Elgg et des anomalies qu&#8217;on y trouve toujours encore régulièrement.</p>
<p>quelques urls intéressants :<br />
des exemples de codes et infos concernant l&#8217;API :<br />
<a href="http://trac.elgg.org/elgg/browser/trunk/mod/apitest/start.php?rev=430" target="_blank">http://trac.elgg.org/elgg/browser/trunk/mod/apitest/start.php?rev=430</a><br />
<a href="http://www.danielansari.com/wordpress/2008/12/how-to-use-the-rest-api-in-elgg-11/" target="_blank">http://www.danielansari.com/wordpress/2008/12/how-to-use-the-rest-api-in-elgg-11/</a></p>
<p>Quelques bouts de code :</p>
<p><a title="elgg plugin dev" href="http://docs.elgg.org/wiki/Plugin_development" target="_blank">le plugin</a> :fichier start.php</p>
<pre>&lt;?php</pre>
<pre>function haras_init()
 {
 /** j'expose ma fonction  au travers de l'api REST */
 expose_function(
 'group.create', //method
 'createGroup', //function
 array (
  "user_guid" =&gt; array('type'=&gt;'string'),
 "montrucnumber" =&gt; array('type'=&gt;'string')
   ), // parameters
 elgg_echo('group.create'),  // description
 "GET", // call_method
 false, // auth token
 true // anonymous   &lt;-- sûrement cette ligne mes questions sur l'authentification <img src='http://www.areyouagile.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <img src='http://www.areyouagile.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
  );
  }</pre>
<pre>function getMontruc($montruc)
 {</pre>
<pre>  /** je récupère l'objet vers le service SOAP tiers */</pre>
<pre>}</pre>
<pre>function createGroup($user_guid, $numtruc)
 {</pre>
<pre>[...]

 $montruc = getMontruc($numtruc)</pre>
<pre>/** je crée dynamiquement un groupe */</pre>
<pre> $group = new ElggGroup();

 $user = get_entity((int)$user_guid);

 $group-&gt;name = $montruc-&gt;name;
 $group-&gt;description = $description;
 $group-&gt;access_id = 2;
 $group-&gt;membership = ACCESS_PUBLIC;
 $group-&gt;files_enable = get_input('files_enable', 'yes');
 $group-&gt;pages_enable = get_input('pages_enable', 'yes');
 $group-&gt;forum_enable = get_input('forum_enable', 'yes');

 $group-&gt;save();

 $group-&gt;join($user); // toujours créer un utilisateur après la création du groupe

 /** l'API ne fonctionne pas je dois manipuler
 // sale mais nécessaire, api bugguée
 $dblink = get_db_link('write');
 $query = "update elggentities set owner_guid =" . $user_guid . " where guid=" . $group-&gt;guid;
 $result = execute_query("$query", $dblink); 

 return 'group ' . $group-&gt;name . ' ' . $group-&gt;owner_guid . ' created';  // ouh là là le proto
 }</pre>
<pre>/** très important, on enregistre le service/handler auprès de Elgg */
 register_elgg_event_handler('init','system','haras_init');</pre>
<pre>?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.areyouagile.com/2009/10/elgg-rest-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

