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

Teil 3: Webservices mit PHP selbst gemacht

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

In der Regel wird man die Erstellung der WSDL-Datei und das Starten des Servers in einer Datei vereinen....

In der Regel wird man die Erstellung der WSDL-Datei und das Starten des Servers in einer Datei vereinen.

require_once "HelloWorldService.php";
require_once "Zend/Soap/Server.php";
require_once "Zend/Soap/
AutoDiscover.php";
if(isset($_GET['wsdl'])) {
$autodiscover = new Zend_Soap_
AutoDiscover();
$autodiscover->setClass
('HelloWorldService');
$autodiscover->handle();
}
else {
$soap = new Zend_Soap_Server
("https://localhost/service.php?wsdl");
$soap->setClass
('HelloWorldService');
$soap->handle();
}

SOAP-Client

Die Verwendung dieses Webservices kann mit verschiedenen Programmiersprachen erfolgen. Dies kann selbstverständlich auch PHP sein. Auch hierzu bietet das Zend- Framework entsprechende Klassen an. Der im folgenden Listing gezeigte Aufruf der Webservice-Klasse kann selbstverständlich auf einem ganz anderen Server erfolgen, dies ist ja auch der Sinn und Zweck eines Webservices. Für unsere Zwecke genügt es aber, den Client auf demselben Webserver zu platzieren wie den Server.

require_once "Zend/Exception.php";
require_once "Zend/Soap/Client.php";
try {
// Erzeugung des Clients anhand
der WSDL
$client=new Zend_Soap_Client(
"https://localhost/
service.php?wsdl");
$string=$client->sayHello("Timo");
echo $string;
}
catch(Zend_Exception $e) {
echo $e->getMessage();
}

Der Quelltext ist einfacher als gedacht? Dies liegt an der Implementierung der Zend-Klassen, die alle notwendigen Arbeiten übernehmen. Der Klasse Zend_Soap_Client wird die URL übergeben, unter der die WSDL-Datei erreichbar ist.

In diesem Fall ist dies das PHP-Skript, welches die WSDL-Definition generiert. Die Client-Klasse des Frameworks stellt anschließend alle in der Definition festgelegten Methoden zur Verfügung, die wie im Beispiel zu sehen ist, wie ganz normale PHP-Funktionen aufgerufen werden können.

Natürliche Grenzen

Diese Art des Zugriffes auf einen Webserver eignet sich nur bis zu einer gewissen Grenze. Je mehr Anfragen an einen Server erstellt werden, beispielsweise, weil Sie viele Besucher einer Seite haben, desto ungeeigneter wird diese Methode einen Client zu erzeugen.

Dies liegt schlicht und ergreifend daran, dass der Client jedes Mal anhand der WSDL-Datei erzeugt wird.

Wie bereits erwähnt, verändert sich die Schnittstelle eines Webservices eher selten, sodass es wenig Sinn macht, die Klassen immer neu zu erstellen.

SOAP via PEAR-Klasse

Neben den hier gezeigten SOAP-Klassen des Zend Frameworks gibt es noch weitere empfehlenswerte SOAP-Implementierungen für PHP. Gute Beispiele hierfür sind die PEAR-Klasse Services_Webservice () oder das WSO2 Framework ().

Durch die allgemeine Verbreitung von SOAP gibt es eine Menge an SOAP-Webservices, die frei im Netz verfügbar sind. Darunter Dienste zur Ermittlung von Wetterdaten, Geo-Informationen, Suche in Katalogen, Suche in Bilddatenbanken und vieles andere mehr.