Zum Inhalt springen
Der Guide für ein smartes Leben.
Datentausch per Webservice

Teil 2: Webservices mit PHP selbst gemacht

Autoren: Redaktion pcmagazin und Timo Haberkern • 21.8.2009 • ca. 1:40 Min

Die meisten PHP-Bibliotheken zur Implementierung von SOAP-Webservices erlauben auch eine automatische Generierung der dazugehörigen WSDL-Files. In einem späteren Listing werden wir hierzu noch ein Beispiel sehen. Schritt für Schritt Zuerst wollen wir uns ansehen, wie eine PHP-Funktion als SOA...

Die meisten PHP-Bibliotheken zur Implementierung von SOAP-Webservices erlauben auch eine automatische Generierung der dazugehörigen WSDL-Files. In einem späteren Listing werden wir hierzu noch ein Beispiel sehen.

Schritt für Schritt

Zuerst wollen wir uns ansehen, wie eine PHP-Funktion als SOAP-Service veröffentlicht und dadurch von anderen Systemen verwendet werden kann. Die folgenden Listings zeigen eine Beispielimplementierung mit den SOAP-Klassen des Zend Frameworks (Open Source).

Dazu ist es selbstverständlich notwendig, die entsprechenden Klassen des Frameworks zu installieren. Alle notwendigen Dateien bekommen Sie unter . Das erste Listing zeigt die Klasse deren Methode wir per SOAP-Webservice erreichbar machen wollen.

<?php
class HelloWorldService {
/**
* Say Hello
*
* @param string $who
* @return string
*/
function sayHello($who) {
return 'Hallo '.$who;
}
}
?>

An dieser Implementierung ist nichts Besonderes oder gar Webservice-Spezifisches. Das Einzige was Sie beachten müssen, um eine Methode einer Klasse per Webservice zu veröffentlichen, ist die Beschreibung der Schnittstelle per Doc-Block-Kommentar.

Wichtig ist hier vor allem das Festlegen der Datentypen der jeweiligen Übergabe- und Rückgabeparameter. Die Veröffentlichung der Methode geschieht im Falle von Zend-Framework über die Klasse Zend_Soap_Server.

<?php
require_once "HelloWorldService.php";
require_once "Zend/Soap/Server.php";
$soap = new Zend_Soap_Server
(null, $options);
$soap->setClass('HelloWorldService');
$soap->handle();
?>

Damit steht der Server zur Verfügung und kann auch bereits eingesetzt werden, allerdings fehlt uns noch die dazu passende WSDL-Beschreibungsdatei, um einen passenden Client zu schreiben.

Die WSDL-Beschreibung können Sie jetzt manuell zusammenschreiben, was natürlich sehr aufwendig wäre. Wie versprochen wollen wir uns ansehen, wie die WSDL-Definition einer Webservice-Methode automatisch erzeugt werden kann. Auch hierzu bietet das Zend-Framework das notwendige Rüstzeug.

require_once "HelloWorldService.php";
require_once "Zend/Soap/Server.php";
require_once "Zend/Soap/
AutoDiscover.php";
$autodiscover = new Zend_Soap_
AutoDiscover();
$autodiscover->setClass
('HelloWorldService');
$autodiscover->handle();

Der Aufruf dieses Skriptes erzeugt die WSDL-Datei, die notwendig ist, um von einem beliebigen Client auf den Service zuzugreifen. Das Ausführen der handle-Methode erzeugt bei jedem Aufrufes des Skriptes das WSDL-File.

Die erneute Erzeugung der WSDL-Definition bei jedem Aufruf macht selbstverständlich nur wenig Sinn. Die Signatur einer Service-Methode ändert sich nur selten, daher kann die WSDL-Datei normalerweise unverändert übernommen werden.

Dazu empfiehlt es sich das Ergebnis in einem Cache zwischenzuspeichern, sodass die Definition nicht jedes Mal aufs Neue erstellt werden muss.