Utiliser Drupal comme client d'un service Web

8

Je dois utiliser Drupal comme client pour un service Web, pour extraire des données et les afficher dans une vue ou en tant que contenu. (Le format utilisé est JSON ou REST.)

J'utilise un module Web Service Client dans Drupal 7 et le module Services dans Drupal 6, mais je ne sais pas comment les utiliser. J'ai lu la documentation mais je n'obtiens aucun résultat.

Quelqu'un peut-il m'aider sur ce problème ou me dire comment utiliser ces modules? Existe-t-il un autre module à cet effet?


Une solution possible: je trouve un module appelé XML VIEWS mais ce module convertit uniquement les fichiers XML.

Maintenant, je programme dans ce module pour convertir le JSON en XML.

Dans ces fichiers: xml_views_plugin_query_xml.inc

Dans cette fonction: Exécuter

Quelqu'un a une autre solution?

Dvex
la source
Il y a eu de bonnes présentations à ce sujet à austin (11) drupalcamp: vimeo.com/33785095 vimeo.com/33091201
chrisjlee

Réponses:

9

Drupal a des fonctions spécifiques qui peuvent aider à communiquer avec un service Web et à gérer les entrées JSON.
Drupal 7 a les fonctions suivantes:

Avec ces fonctions, vous pouvez écrire votre propre module personnalisé pour faire des demandes à un site implémentant un service Web.

S'il existe des restrictions sur le nombre de requêtes pouvant être effectuées sur le serveur Web, vous pouvez utiliser les fonctions Drupal pour mettre en cache le résultat obtenu à partir du serveur Web:

  • cache_get () , pour obtenir les données enregistrées dans le cache
  • cache_set () , pour enregistrer les données dans le cache

Pour remarquer que Drupal prend en charge plusieurs bacs de cache, et les modules peuvent utiliser leurs propres bacs de cache, si nécessaire.
Drupal prend également en charge les éléments de cache qui sont automatiquement supprimés lors du balayage de cache successif (voir la description de la constante CACHE_TEMPORARY ). Implémentant hook_flush_caches () , les modules permettent aux utilisateurs administrateurs de nettoyer le cache utilisé par le module lorsque le bouton "Effacer" de la page "Performances" est cliqué, ou chaque fois qu'un module appelle drupal_flush_all_caches () .

Dans Drupal 7, les données de cache pour les données fréquemment utilisées sont associées à une variable statique gérée avec drupal_static () . Lorsque les données sont très fréquemment utilisées lors de la sortie de la même page, un code similaire au suivant est utilisé:

  // Use the advanced drupal_static() pattern, since this is called very often.
  static $drupal_static_fast;
  if (!isset($drupal_static_fast)) {
    $drupal_static_fast['implementations'] = &drupal_static(__FUNCTION__);
  }
  $implementations = &$drupal_static_fast['implementations'];

  // …

  // Fetch implementations from cache.
  if (empty($implementations)) {
    $implementations = cache_get('module_implements', 'cache_bootstrap');
    if ($implementations === FALSE) {
      $implementations = array();
    }
    else {
      $implementations = $implementations->data;
    }
  }

Le code fait partie de module_implements () .

kiamlaluno
la source
Avez-vous essayé drupal.org/project/wsclient ? Je suis intéressé si ce module aide à l'implémentation du client ws
milkovsky
2

Chaque fois que j'ai eu besoin de consommer un webservice, je viens de créer une classe PHP basée sur file_get_contents ou curl en conjonction avec json_decode ou simplexml_load_string .

La classe est ensuite accessible dans un module via une fonction getter qui utilise drupal_static , ou le $staticmodèle pour Drupal 6.

J'utilise ensuite cela dans mes blocs personnalisés, mes rappels de menu, etc., au besoin.

ÉDITER

La réponse de @ kiamlaluno est correcte et montre un moyen de le faire tout au long de l'API Drupal. La principale raison pour laquelle je ne fais pas cela est que je préfère résumer la classe webservice d'une manière qui me permet de l'utiliser dans d'autres applications. Il y a des avantages et des inconvénients à cela, alors pesez vos options.

mpdonadio
la source
Cela signifie-t-il que je planifie de consommer des données du service Web? Existe-t-il une solution en tant que constructeur de site avec des modules?
Dvex
Je suis désolé, mais je ne comprends pas très bien ce que vous essayez de faire.
mpdonadio
En d'autres termes, je recherche une solution qui n'implique pas de programmation. Une solution comme un constructeur de site avec des modules. Mais, si dans mon cas impliquez la programmation, j'ai besoin des étapes pour le faire.
Dvex
Pourriez-vous fournir un exemple de classe de service Web abstraite?
milkovsky