Datentausch per Webservice

Teil 2: Webservices mit PHP selbst gemacht

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.

Mehr zum Thema

HTML5: Quick Reference Guide
Ratgeber: "HTML5"

Die wichtigsten Tags auf einen Blick: In unserem praktischen Arbeitsblatt finden Sie einen wertvollen Begleiter für die Umstellung Ihrer Webprojekte…
internet, webdesign, google, content, ranking, seo, suchmaschine
Ratgeber: Urheberrecht

Einzigartige Inhalte bieten Lesern Mehrwert und sind ein wichtiges Qualitätsmerkmal. Ärgerlich, wenn sich jemand durch Kopieren an fremden Ergebnissen…
Die besten HTML5-Tipps
Neue Tipps & Tricks für blitz.io

Wer die Leistung einer Applikation ermitteln möchte, braucht keine Skripte zu schreiben, sondern kann einen der zahlreichen Online-Dienste einspannen.…
image.jpg
Ratgeber: Webentwicklung

Die clientseitige Javascript-Entwicklung bietet fast keine Entwicklungsumgebungen und auch keine vernünftigen Werkzeuge zur Fehlersuche. Eine der…
internet, webdesign, meteor, webapplikationen
Ratgeber

Mit Meteor sollen Entwickler in kurzer Zeit Umgebungen für Webapplikationen erstellen können, ohne sich um lästige Details kümmern zu müssen. Wir…