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 lesen

Chronologische Liste und Netflix-Links -

Neuerscheinungen in der Übersicht -

Vorschau auf Film- und Serien-Highlights -

Mehr zum Thema

Webdesign

Adobe Illustrator wird im Webdesign immer beliebter. Wie Sie das Tool richtig einsetzen, erfahren Sie hier.
Facebook

Was sind die Implikationen für Unternehmen und Endanwender bei Facebooks neuer Suche Graph Search?
Online-Recht

Allgemeine Geschäftsbedingungen liest sich niemand gerne durch. Sie sind jedoch notwendig und äußerst sinnvoll. Worauf sie achten sollten.
Online-Recht in der Cloud

Dateien werden immer häufiger in der Cloud bereitgestellt. Rechtlich ist das jedoch durchaus problematisch. Wir klären über das Urheberrecht in der…
E-Commerce-Logistik

Für den Erfolg eines Online-Shops sind zahlreiche Faktoren verantwortlich. Neben Produktvielfalt und Darstellung der Waren gehört auch die Logistik.