Le wiki pour les développeurs

27 févr. 2009 5 min read

Nous reproduisons ici un article paru dans la version papier de Programmez!, rédigé par Guillaume Lerouge, product manager chez XWiki.

Introduction

De nombreuses communautés de développeurs utilisent des wikis pour soutenir leur processus de développement, aussi bien dans le monde de l'Open-Source que chez les éditeurs traditionnels. Un wiki est un logiciel permettant de créer un site web sur lequel les utilisateurs autorisés vont avoir la possibilité d'éditer les pages et d'ajouter du contenu très facilement. Il permet donc à une équipe de partager des informations et de collaborer facilement et rapidement. Depuis l'apparition des wikis en 1995, leurs fonctionnalités basiques ont relativement peu évolué (édition facile des pages et historique des modifications, création de liens). On a ensuite progressivement assisté à l'apparition de wikis permettant offrant beaucoup d'options en termes d'extensibilité et de modularité. TWiki est créé en 1998 avec l'objectif de fournir des services tournés vers l'entreprise. XWiki est créé en 2003 afin d'offrir la possibilité de créer des applications (blog, FAQ) au sein même du wiki.

Dans cet article, nous allons voir ce que la possibilité de créer des applications offre en plus par rapport à un wiki traditionnel.

Pourquoi créer une application dans son wiki ?

La force traditionnelle des wikis se trouve dans la simplicité avec laquelle ils permettent à leurs utilisateurs de modifier les contenus existants. Elle s'oppose notamment aux templates de structuration offerts par les CMS traditionnels. Cependant il est parfois intéressant de pouvoir combiner contenus structurés et peu structurés sur une même plateforme. C'est ce que permettent de faire les applications. Une application permet de définir un type de document donné (par exemple une fiche produit avec un titre, un champ de description, une image et un tableau avec ses prix) et de créer de nouvelles pages qui utilisent ce modèle. Il est ensuite possible de lister toutes les pages qui utilisent un modèle donné ("Liste de toutes les fiches produit disponibles sur ce wiki") à l'aide d'un langage de requête.

De ce fait, il devient possible de combiner sur la même plateforme des données structurées et faciles à exploiter (les informations présentes dans les fiches produit) et des données non-structurées (pages wiki traditionnelles). Cela offre plus de souplesse et de flexibilité que les approches traditionnelles. Dans cet article, nous allons décrire brièvement comment il est possible de créer une petite application à partir de la plateforme XWiki.

Quelques considérations techniques

Architecture client-serveur

Un wiki fonctionne suivant une architecture client-serveur traditionnelle. Le logiciel tourne sur un serveur distant connecté à internet, et ses utilisateurs accèdent au site et à ses contenus à travers leur navigateur web. Cela implique qu'il est possible de se connecter à un wiki et de modifier ses contenus depuis toute machine connectée à internet.

Certains wikis offrent d'autres moyens d'accéder à leurs contenus au travers de leur API (REST, XML/RPC, RSS), ce qui permet parfois l'utilisation d'un client riche pour interagir avec le wiki. Par exemple, le logiciel XEclipse (basé sur Eclipse RCP) permet d'éditer les contenus d'un XWiki Enterprise (une solution de wiki professionnelle) en mode déconnecté et de les synchroniser avec les contenus du wiki lors du retour en mode connecté.

Couches applicatives

Le wiki en tant que logiciel est le plus souvent composé de plusieurs couches applicatives superposées. Dans le cas de XWiki Enterprise, on peut ainsi compter :

  • Le serveur d'applications : XWiki Enterprise étant écrit en Java, il nécessite une JVM et un serveur d'applications pour tourner. Dans le cas de XWiki Enterprise, ce peut être Jetty, Glassfish, JBoss ou encore Apache Tomcat.
  • La base de données : c'est là que sont stockés les contenus du wiki à proprement parler. XWiki Enterprise utilise Hibernate, qui permet la connexion à un grand nombre de bases de données parmi lesquelles on citera MySql, Derby, Oracle, PostGre ou encore HSQLDB.
  • La business logic : c'est ce qui constitue le coeur du wiki à proprement parler: gestion des documents (édition, historique) et des utilisateurs (droits d'accès), fonctionnalités d'import et d'export? Elle est constituée de composants qui s'interfacent entre eux et est écrite en Java. Elle peut être étendue à l'aide de nouveaux composants. Elle s'appuie sur de nombreux composants Open-Source (Struts...)
  • Les applications : cette couche est particulière à XWiki Enterprise. C'est ce qui fait de cette solution un wiki de seconde génération. A l'aide des langages de script Velocity et Groovy et d'un système de classes et d'objets, elle permet la création d'applications (telles qu'un blog ou un album photo) au sein même du wiki.
  • L'interface utilisateur : c'est ce que l'utilisateur voit lorsqu'il se connecte sur le wiki. Elle utilise les technologies web standard (HTML, CSS, JavaScript).
  • Le serveur web : il permet de servir les pages du wiki en ligne et de gérer les connexions et le cache. Le plus communément utilisé est Apache HTTP.

Créer une application

XWiki utilise un modèle de classes et d'objets pour définir le modèle de données d'une application. Il fonctionne de la façon suivante (nota: la longueur de cette article ne permettait pas d'inclure un tutoriel complet sur la création d'applications dans Xwiki. Vous trouverez un lien vers un tutoriel complet en bas de page.):

  • Le développeur définit une classe. Une classe est constituée d'un ensemble de propriétés (string, number, textarea...). Ainsi, dans le cas d'une fiche produit, on définira une propriété de type string pour stocker le nom du produit, une propriété de type textarea pour stocker sa description. D'une façon plus ludique, on peut voir la classe comme un moule à gâteaux.
  • Le développeur pourra ensuite créer des objets à partir de cette classe. Un objet est une instance d'une classe donnée. Par exemple, les données relatives à une fiche produit seront stockées dans l'objet correspondant. Chaque objet peut être considéré comme un gâteau fait à partir du moule initial.
  • Il faut aussi définir une ClassSheet pour chaque classe. Le template définit la façon dont les propriétés de la classe vont être affichées au sein d'une page wiki. Par exemple, c'est dans la ClassSheet que l'on définit que le nom du produit sera affiché en gros caractères en haut à gauche de la page, sa description en petits caractères en dessous, son image de référence sur la droite de la page.
  • Enfin, il faut définir le ClassTemplate de cette classe. Ce template est la page de référence qui sera copiée à chaque fois qu'un nouveau document contenant un objet de cette classe est créé. Le template contient un objet vide de la classe choisie. Ainsi, lorsqu'on créera une nouvelle fiche produit, elle sera créée selon le modèle défini dans le template « Fiche Produit ».

Une fois ces étapes suivies, le modèle de données est prêt: les utilisateurs vont pouvoir créer de nouveaux documents qui suivent le modèle de page défini dans la classe. Pour ce faire, il suffit d'ajouter un formulaire sur la page d'accueil de l'espace dans lequel se trouve votre application :

Vous pouvez également ajouter une recherche dans les documents correspondant à l'application.

Au delà du système de classes et d'objets, XWiki offre une API très riche au travers de laquelle il est possible d'accéder à un grand nombre d'informations. Par exemple, insérer : 

$doc.creationDate()

 dans une page affichera la date à laquelle ce document a été créé. 

$doc.author

 affichera le nom de la dernière personne à avoir édité le document en question. De plus, XWiki offre la possibiltié d'utiliser des langages de templating et de scripting au sein même du wiki:

  • Velocity : ce langage de templating simple à utiliser peut être utilisé pour opérer des actions simples sur vos pages. Par exemple, le code suivant affichera un contenu différent selon que l'utilisateur en train de consulter la page est l'administrateur par défaut du wiki ou pas : 
#if($context.user == « XWiki.Admin »)
Vous êtes l'administrateur par défaut de ce wiki !
#else
Vous êtes un utilisateur classique.
#end
  • Groovy : ce langage de script qui étend Java a vocation à permettre le traitement de tâches plus complexes (telles que l'import d'un fichier XLS) au sein même d'une page wiki. Il requiert l'utilisation d'un droit de programmation spécifique.

Pour en savoir plus

Articles similaires :