Teil 2: Webservices mit PHP selbst gemacht
- Webservices mit PHP selbst gemacht
- Teil 2: Webservices mit PHP selbst gemacht
- Teil 3: Webservices mit PHP selbst gemacht
- Teil 4: Webservices mit PHP selbst gemacht
- Teil 5: 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 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.