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?
Réponses:
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:
rawurlencode()
chaîne -d.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:
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é:
Le code fait partie de module_implements () .
la source
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
$static
modè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.
la source