Drupal – Créer un service sur mesure dans Drupal


Dans cet article, on va créer un service sur mesure au sein de Drupal. Créer un service peut se révéler très utile, car comme il est dit dans la définition en anglais donnée ci-dessous, vous pourrez accéder un ensemble de méthodes permettant de connecter des applications distantes à du contenu émanant de votre site sous Drupal. Une application distante faite sous Flex ou sous Flash par exemple. Par ailleurs, on s’approche assez près alors même que nous sommes dans un CMS, d’un développement et du vocabulaire proche d’un Framework PHP.

Beginning Drupal®

Beginning Drupal®

Un bon livre parmi l'abondante littérature sur Drupal, notamment qui met en avant les différences entre Drupal 7 et Drupal 6. Le livre passe la totalité de ce qu'il faut savoir pour maitriser le CSM Drupal : l'administration, la configuration, le gestion des utilisateurs et des autorisations. Ce livre traite traite également de la gestion du contenu, rappelez-vous Drupal est un outil de gestion de contenu, on sait tout sur les noeuds, les utilisateurs, les blocs, le tentaculaire et insondable système de taxonomie de Drupal. Bref, la totale. A noter aussi, des conseils avisés pour faire en sorte que votre site ne ressemble pas à un site Drupal, notamment avec des instructions sur l'extension fonctionnelle de votre site à l'aide de modules personnalisés.

Genre(s) : , , , , , , , , , , , , , , , , , ,
Auteur(s) :
Edition(s) :

Services are collections of methods available to remote applications. They are defined in modules, and may be accessed in a number of ways through server modules.

Que vous utilisiez la version 5 et + ou la version 6 de Drupal, le fonctionnement est le même. Il est nécessaire d’avoir activé les modules suivants :

  • le module Service
  • le module Node Service

Pour les besoins de cet article, notre environnement de travail sera une installation de Drupal 5.14 en local.

  • Frontend – http://127.0.0.1/DRUPAL/drupal-5.14/
  • Backend – http://127.0.0.1/DRUPAL/drupal-5.14/admin/

Pour comprendre comment installer cet environnement PHP-MySQL, reportez-vous aux articles de ce blog :

Un autre article sur Drupal qui fait référence au même environnement.

Activer les modules

Pour rendre effectif le service, il faut retourner dans l’administration et activer sous l’onglet “Core – required” à l’URL suivante http://127.0.0.1/DRUPAL/drupal-5.14/admin/build/modules, les

– Dans l’onglet Services, le module “Services”
– Dans l’onglet Services – services, le module “Node Service”

Drupal - Créer un service sur mesure dans Drupal

Drupal - Créer un service sur mesure dans Drupal

activation du module Services
Drupal - Créer un service sur mesure dans Drupal

activation du module Node service
Drupal - Créer un service sur mesure dans Drupal

Une fois modules activés, votre Drupal est désormais en mesure de se comporter comme une véritable web application au même titre que Google, Flickr, Facebook. Vous pouvez désormais offrir la possibilité à d’autres site de publier du contenu en provenance de votre site

Voir quels sont les services activés


Un lien “Services” apparaît dans la colonne de gauche de navigation sous le lien “Modules”

Dans la page “Services”, il faut aller dans l’onglet “Settings” et décocher les deux checkboxes suivantes :

  • Use keys
  • Use sessid

désactivation de Use keys et Use keys
Drupal - Créer un service sur mesure dans Drupal

Creér un Content type nommé Personne

On va créer de toutes pièces un content type nommé Personne correspondant à une entrée dans un carnet d’adresse. Quel intérêt, il y a-t-il à créer un Content type me direz-vous ? Cela vous permet en autre de gérer du contenu récurrent des fiches de musique pour un site de musique, des profils d’intervenants pour un site évènementiel, des listes d’hôtels pour un site de réservation. Etc vous isolez à l’aide de Drupal un contenu spécifique que vous pourrez ensuite appeler via une API différente via une datagrid sous Flex par exemple.

Name * => Personne
Type * => personne
Description => C’est le contenu type d’un carnet d’adresse

La valeur description est optionnel, les deux autres étant obligatoires (signalés par une *). Néanmoins, il n’est pas inutile de commenter certains types dans la mesure où vous n’êtes pas toujours le seul administrateur du contenu, il peut donc être utile de préciser un peu la nature du contenu en question. C’est un peu la fonction du commentaire dans des lignes de code !

les champs Name *, Type * et Description
Drupal - Créer un service sur mesure dans Drupal

Title field => Nom
Body field => Adresse

Les autres spécifications restent les mêmes par défaut.

Drupal - Créer un service sur mesure dans Drupal

Drupal - Créer un service sur mesure dans Drupal

le Content type nommé Personne
Drupal - Créer un service sur mesure dans Drupal

Insérer un peu de contenu

On va créer du contenu bouchon pour les besoins de notre démonstration…. Cela ressemble pour commencer à un jeu de Monopoly ! A titre d’information, nous indiquons en italique et entre parenthèse la valeur nid qui nous est retournée par Drupal après l’insertion.

Paul
15, rue de la paix
(12)

Pierre
2, Place du marché
(13)

Vanina
34, rue des soupirs
(14)

Nelson
Impasse Napoléon
(15)

Drupal - Créer un service sur mesure dans Drupal

Une fois ce contenu créé, on peut aller vérifier que le contenu que nous venons d’insérer est bien inclus dans un noeud ou node, à l’aide de Services > node.load. Dans notre exemple, le nid pour Paul est 12. On va se servir des fields pour ne retourner que l’essentiel attaché à une personne à savoir : nid,title,body. Attention, vous devez écrire sans espace et le nom des valeurs en anglais…

Préparer des fichiers pour notre module

Nous allons créer un répertoire du nom de personne_service à l’endroit suivant sites > all > modules > personne_service. Nous sommes sur Mac dans la répertoire htdocs de MAMP.

Drupal - Créer un service sur mesure dans Drupal

Il reste ensuite à créer deux fichiers : personne_service.info, personne_service.module

Le fichier personne_service.info

name = Service to the personne
version = 1.0
description = A service for address book
package = Services - services
dependencies = services

Mieux vaut écrire les variables du fichier .info en anglais

name = Service à la personne
version = 1.0
description = Un service pour insérer un carnet d'adresse
package = Services - services
dependencies = services

La valeur dependencies est là pour rappeler que notre service Personne ne peut être utilisé sans l’activation du module services

Le service Personne est inactif
Drupal - Créer un service sur mesure dans Drupal

Le service Personne est activé
Drupal - Créer un service sur mesure dans Drupal

Le fichier personne_service.module
Nous allons testé dans un premier la fonction personne_service_all de notre service module personne_service_service, le nom de cette fonction se compose du nom du module personne_service auquel est ajoutée la mention _service, cette fonction retourne des tableaux multidimensionnels arrays of arrays.

/* un simple retour pour un besoin de test */
/* return "Bonjour Hecube"; */

Le fonction marche, elle retourne return "Bonjour Hecube";
Drupal - Créer un service sur mesure dans Drupal

Une fois désactivée et une fois complétée comme dans le code ci-dessous, on aura alors les 4 nœuds ou résultats qui seront retournés.

Drupal - Créer un service sur mesure dans Drupal

Dans l’écriture de la requête, mieux vaut mettre la valeur {node} car Drupal identifie la valeur automatiquement et la remplace par le nom de table correct $result = db_query("SELECT * FROM {node} WHERE type='personne' ");. Sinon, c’est la fonction node_load de Drupal qui va nous permettre de retourner un noeud complet.

On va rajouter des arguments dans fields pour retourner un moins grand nombre de valeurs dans notre array.

Ci-dessous la vesrion complete du code source de personne_service.module.

Le code source complet de personne_service.module

<?php
 
 
function personne_service_service () {
 
	return array (
					array (
						/* la méthode */
						'#method' => 'personne_all',
						/* la fonction */
						'#callback' => 'personne_service_all',
						/* les filtres */
						'#args' => array (
						 array (
								'#name' => 'fields',
								'#type' => 'array',
								'#optional' => true,
								'#description' => 'Une liste de champs pour filtrer notre carnet avec les adresses'
								)
							),							
						/* le retour */
						'#return' => 'array',
						/* description */
						'#help' => 'Retourne une liste de personne'
 
 
						)
		);
}
				/* V00 */
				function personne_service_all ($fields = array() ) {
					/* un simple retour pour un besoin de test */
					/* return "Bonjour Hecube"; */
					$result = db_query("SELECT * FROM {node} WHERE type='personne' ");
					$nodes = array ();
						while ($node = db_fetch_object($result)) {
								$nodes[] = node_load($node);
							}
					return $nodes;
 
				}
?>

Comment installer et activer les services et webservices sous Drupal 6

Il vous reste aussi à télécharger le module Services 6.x-0.15 (services-6.x-0.15.tar.gz) à l’adresse suivante http://drupal.org/project/services) à dézipper le tout et à l’envoyez en FTP le répertoire services dans /chemin_vers_drupal/drupal_install/modules.

Il vous reste à télécharger le module Web Services 6.x-1.02 (webservices-6.x-1.02.tar.gz) à l’adresse suivante http://drupal.org/project/webservices) à dézipper le tout et à l’envoyez en FTP le répertoire webservices dans /chemin_vers_drupal/drupal_install/modules.

Les services et webservices sous Drupal 6 sont activés
Drupal - Créer un service sur mesure dans Drupal

Drupal - Créer un service sur mesure dans Drupal

Pour aller plus loin