Verwenden von Drupal als Client eines Webdienstes

8

Ich muss Drupal als Client für einen Webdienst verwenden, um Daten zu extrahieren und in einer Ansicht oder als Inhalt anzuzeigen. (Das verwendete Format ist JSON oder REST.)

Ich verwende ein Web Service Client- Modul in Drupal 7 und das Services- Modul in Drupal 6, weiß aber nicht, wie ich sie verwenden soll. Ich habe die Dokumentation gelesen, aber kein Ergebnis erhalten.

Kann mir jemand bei diesem Problem helfen oder mir sagen, wie ich diese Module verwenden soll? Gibt es ein anderes Modul für diesen Zweck?


Eine mögliche Lösung: Ich finde ein Modul namens XML VIEWS, aber dieses Modul konvertiert nur XML-Dateien.

Jetzt programmiere ich in diesem Modul die Konvertierung von JSON in XML.

In diesen Dateien: xml_views_plugin_query_xml.inc

In dieser Funktion: Ausführen

Hat jemand eine andere Lösung?

Dvex
quelle
Es gab einige gute Präsentationen zu diesem Thema im austin (11) drupalcamp: vimeo.com/33785095 vimeo.com/33091201
chrisjlee

Antworten:

9

Drupal verfügt über spezielle Funktionen, die bei der Kommunikation mit einem Webdienst und der Verarbeitung von JSON-Eingaben hilfreich sein können.
Drupal 7 hat folgende Funktionen:

Mit diesen Funktionen können Sie Ihr eigenes benutzerdefiniertes Modul schreiben, um Anforderungen an eine Site zu stellen, die einen Webdienst implementiert.

Wenn es einige Einschränkungen hinsichtlich der Anzahl der Anforderungen gibt, die an den Webserver gesendet werden können, können Sie die Drupal-Funktionen verwenden, um das vom Webserver erhaltene Ergebnis zwischenzuspeichern:

Um festzustellen, dass Drupal mehr als einen Cache-Bin unterstützt und Module bei Bedarf ihre eigenen Cache-Bins verwenden können.
Drupal unterstützt auch Cache-Elemente, die beim aufeinanderfolgenden Cache-Swipe automatisch entfernt werden (siehe Beschreibung für die Konstante CACHE_TEMPORARY ). Durch die Implementierung von hook_flush_caches () ermöglichen die Module den Administratorbenutzern, den vom Modul verwendeten Cache zu bereinigen, wenn auf der Seite "Leistung" auf die Schaltfläche "Löschen" geklickt wird oder wenn ein Modul drupal_flush_all_caches () aufruft .

In Drupal 7 werden Cache-Daten für häufig verwendete Daten einer statischen Variablen zugeordnet, die mit drupal_static () behandelt wird . Wenn die Daten bei der Ausgabe derselben Seite sehr häufig verwendet werden, wird ein Code verwendet, der dem folgenden ähnlich ist:

  // 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;
    }
  }

Der Code ist Teil von module_implements () .

kiamlaluno
quelle
Haben Sie drupal.org/project/wsclient ausprobiert ? Ich bin interessiert, ob dieses Modul bei der Implementierung des WS-Clients hilft
Milkovsky
2

Jedes Mal, wenn ich einen Webservice nutzen musste, habe ich gerade eine PHP-Klasse erstellt, die auf file_get_contents oder curl in Verbindung mit json_decode oder simplexml_load_string basiert .

Auf die Klasse wird dann in einem Modul über eine Getter-Funktion zugegriffen , die drupal_static oder das $staticMuster für Drupal 6 verwendet.

Ich verwende dies dann nach Bedarf in meinen benutzerdefinierten Blöcken, Menü-Rückrufen usw.

BEARBEITEN

Die Antwort von @ kiamlaluno ist korrekt und zeigt einen Weg, dies alles über die Drupal-API zu tun. Der Hauptgrund, warum ich dies nicht tue, ist, dass ich die Webservice-Klasse lieber so abstrahiere, dass ich sie in anderen Anwendungen verwenden kann. Dies hat Vor- und Nachteile. Wägen Sie also Ihre Optionen ab.

mpdonadio
quelle
Bedeutet das, dass ich Daten aus dem Webservice verwenden möchte? Gibt es eine Lösung als Sitebuilder mit Modulen?
Dvex
Es tut mir leid, aber ich verstehe nicht ganz, was Sie versuchen zu tun.
mpdonadio
Mit anderen Worten, ich suche eine Lösung, die keine Programmierung beinhaltet. Eine Lösung wie ein Site Builder mit Modulen. Aber wenn ich in meinem Fall programmieren muss, brauche ich die Schritte dafür.
Dvex
Können Sie ein Beispiel für eine abstrakte Webservice-Klasse angeben?
Milkovsky