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?
Antworten:
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:
rawurlencode()
-d-Zeichenfolge.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:
Der Code ist Teil von module_implements () .
quelle
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
$static
Muster 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.
quelle