Seien Sie dabei!

Als Dienstleister im Markt für Internetanwendungen egal ob browserbasiert oder für das mobile Internet ist die edition-software GmbH eine gute Adresse wenn es um zuverlässige Anwendungen mit einem ausgezeichneten Preis-Leistungsverhältnis geht. Überzeugen Sie sich, sprechen Sie uns gerne an.

Ihre edition-software

drupal XML-RPC Server

Das Content-Managemet System Drupal gilt als ausserordentlich flexibles Werkzeug zur Behandlung von strukturiertem und semistrukturiertem Content. Weniger bekannt ist, dass es auch über eine sehr mächtige API verfügt, die Extensible Markup Language Remote Procedure Call konforme Aufrufe erlaubt. Damit können Webservices realisiert werden. Der Endpunkt ist die in der Wurzel liegende Datei xmlrpc.php. Als Client kommen verschiedene Tools in Betracht, wir verwenden hier das als pear Paket vorliegende XML_RPC2. Ein

pear install XML_RPC2

installiert dieses Paket ganz ohne Compilieraufwand.

Den Server erforschen

Um den in drupal eingebauten Server zu erforschen benötigen wir einen Client, dessen Grundgerüst mit der verwendeten Bibliothek schnell erstellt ist:

  1. require_once 'XML/RPC2/Client.php';
  2. $clt = XML_RPC2_Client::create('http://localhost:9032/xmlrpc.php',
  3. 'prefix' => 'system.',
  4. 'encoding' => ini_get('default_charset'),
  5. 'debug' => true
  6. )
  7. );

Nach dem obligatorischen include wird direkt ein Client Objekt erzeugt, dass auf eine beliebige drupal Installation zeigt. Die Optionen sollten für erste Schritte so belassen werden wie vorgeschlagen. Durch die Angabe der debug Option werden Request und Response der Kommunikation mit dem Server ausgegeben.

Um den Client in Betrieb zu setzen lassen wir ihn nun eine erste Methode aufrufen:

  1. try {
  2. $result = $clt->listMethods( );
  3. print_r($result);
  4. } catch (exception $e){
  5. print $e->getMessage();
  6. }

Wir rufen also die Methode system.listMethods() auf, die uns standardmäßig ein Array mit allen verfügbaren Methodennamen zurückgibt. Der Namensraum system. wird dabei aus dem Prefix gebildet. Der Request wird von XML_RPC2 als
<?xml version="1.0"?>
<methodCall>
<methodName>system.listMethods</methodName>
<params/>
</methodCall>

und der Response von drupal als
<?xml version="1.0"?>
<methodResponse>
  <params>
  <param>
    <value><array><data>
  <value><string>system.multicall</string></value>
  <value><string>system.methodSignature</string></value>
  <value><string>system.getCapabilities</string></value>
  <value><string>system.listMethods</string></value>
  <value><string>system.methodHelp</string></value>
</data></array></value>
  </param>
  </params>
</methodResponse>

produziert. Mit etwas Übung lässt sich aus dem XML der Antwort schon das Pendant in PHP ablesen, ein numerisch indiziertes Array der Methodennamen.
Array
(
    [0] => system.multicall
    [1] => system.methodSignature
    [2] => system.getCapabilities
    [3] => system.listMethods
    [4] => system.methodHelp
)

eigene Drupal XML-RPC Methoden

Nachdem unser Testbeispiel hoffentlich funktioniert, wenden wir uns nun dem Schreiben von eigenen XML-RPC Komponenten in drupal zu und konstruieren ein drupal Modul das dies leistet. Nennen wir es myrpc, d.h. wir legen im Unterverzeichnis modules unserer drupal Installation das Verzeichnis myrpc an. Der Name dieses Verzeichnis ist beliebig. Damit drupal er sinnvoll verwalten kann, wechseln wir in dieses Verzeichnis und legen dort die Metadatei myrpc.info an:

name        = myrpcTest
description = xml-rpc test edition-software
php         = 5.1
core        = 6.x

Die Zeilen sind selbsterklärend und für jeden der schon einmal ein drupal Modul geschrieben hat eigentlich selbstverständlich. Damit unser Modul sinnvoll arbeiten kann müssen wir wenigstens eine hook Funktion implementieren, da wir ein XML-RPC Modul bauen wollen, muss die xmlrpc hook bedient werden. Dazu legen wir die Datei myrpc.info an und füllen sie wie folgt:
  1. <?php
  2. function myrpc_xmlrpc(){
  3. return array (
  4. 'myrpc.helloWorld',
  5. 'myrpc_helloworld',
  6. array('string')
  7. 'Hallo Welt'
  8. ),
  9. );
  10. }
  11. ?>

In dieser hook werden also die nach aussen hin sichtbaren Methodennamen (hier myrpc.helloWorld), ihre interne Umsetzung auf Funktionen oder Methoden in drupal (hier myrpc_helloworld), die Argumentliste dieser Funktionen (hier: Rückgabe eines Strings, Aufruf ohne Parameter) sowie eine Beschreibung der Schnittstelle aufgeführt. Die Angabe mehrere sichtbarer Methoden ist ebenso möglich wie die Umsetzung auf Funktionen oder Methoden anderer drupal-Module.
Um einen Laufzeitfehler zu vermeiden müssen wir nun die eigentliche Funktion myrpc_helloworld implementieren. Da wir der Einfachheit halber eine Funktion im gleichen Modul gewählt haben, schreiben wir diese funktion direkt in die Datei myrpc.module.
function myrpc_helloworld(){
  return 'Hallo Welt!';
}

Mit diesen wenigen Schritten haben wir nun unseren ersten eigenen XML-RPC Server auf Basis der eingebauten drupal Funktionen erstellt.

Bevor wir testen können, müssen wir das Modul noch unter /admin/build/modules aktivieren.

Es sei dringend darauf hingewiesen, dass man sich bei der XML-RPC Schnittstelle selbst um Authentisierung und Authorisierung kümmern muß, um kein Scheunentor für Angriffe aufzubauen. Ein drupal Modul, welches die XML-RPC API in drupal nutzt ist die blogAPI, hier kann man sich viele Anregungen holen.

Technologie

02/29/2012 - 18:43
02/29/2012 - 17:43
01/19/2012 - 11:45
04/06/2011 - 08:58
12/21/2010 - 23:28
11/26/2010 - 15:54
11/14/2010 - 10:42