Viele Organisationen haben Apache und PHP als ihre Webanwendungsumgebung übernommen. Die Einführung von PHP im Web-Services-Modus mag schwierig erscheinen. Tatsächlich können Sie mit NuSoap PHP jedoch problemlos zum Erstellen von SOAP-Clients und -Servern verwenden.
Um zu veranschaulichen, wie NuSoap und PHP zum Erstellen von Webdiensten verwendet werden, geben wir ein einfaches Beispiel. Diese Beispielanwendung besteht aus einem PHP-Webdienstserver und -Client. Es werden zwei Funktionen implementiert: die Reihenfolge der Zeichen in einer Zeichenfolge umkehren und die Summe zweier Zahlen ermitteln.
PHP-SOAP-Server Das Einrichten eines SOAP-Servers ist mit PHP und NuSoap sehr einfach. Im Grunde schreiben Sie einfach die Funktionen, die Sie Ihren Webdiensten zur Verfügung stellen möchten, und registrieren sie bei NuSoap.
OK, es sind noch zwei weitere Schritte erforderlich, um die Einrichtung des PHP-SOAP-Servers abzuschließen. Zuerst müssen Sie eine Instanz des NuSoap-Objekts in Ihrem PHP-Code erstellen und dann die HTTP-POST-Methode verwenden, um die Rohdaten zur Verarbeitung an NuSoap zu übergeben. Klingt einfach? Werfen wir zunächst einen Blick auf Listing 1.
Listing 1: Soapfunc.php
<?
require_once('nusoap.php');
Funktion reverse($str){
$retval = "";
if(strlen($str) < 1) {
return new Soap_fault('Client','','Invalid string');
}
for ($i = 1; $i <= strlen($str); $i++) {
$retval .= $str[(strlen($str) - $i)];
}
return $retval;
}
Funktion add2numbers($num1, $num2) {
if (trim($num1) != intval($num1)) {
return new Soap_fault('Client', '', 'Die erste Zahl ist ungültig');
}
if (trim($num2) != intval($num2)) {
return new Soap_fault('Client', '', 'Die zweite Zahl ist ungültig');
}
return ($num1 + $num2);
}
?>
Listing 1 zeigt die Quelldatei von Soapfunc.php. Diese Datei enthält zwei Funktionen, die wir Webdiensten über das SOAP-Protokoll zur Verfügung stellen möchten: reverse und add2numbers, die den Kern unserer Webdienstanwendung bilden. Die Umkehrfunktion nimmt ein Argument, kehrt die Reihenfolge der Zeichen in der Zeichenfolge um und gibt sie zurück.
Listing 2: Soapserver.php
<?
require_once('nusoap.php');
include('soapfunc.php');
$soap = neuer Soap_server;
$soap->register('reverse');
$soap->register('add2numbers');
$soap->service($HTTP_RAW_POST_DATA);
?>
Listing 2 veranschaulicht die Verwendung von NuSoap-Registrierungsfunktionen und den Aufruf von SOAP-Handlern. Wie Sie sehen, ist das Registrieren Ihrer beiden Funktionen (in Soapfunc.php) und das Übergeben der POST-Daten an das Soap_server-Objekt so einfach wie das Erstellen einer neuen Instanz des Soap_server-Objekts. Das Soap_server-Objekt untersucht die POST-Daten und bestimmt, welche Funktion aufgerufen werden soll, und übergibt dann die Parameter an diese PHP-Funktion. Die von der PHP-Funktion zurückgegebenen Daten werden in eine SOAP-Antwort neu verpackt und an den SOAP-Client übermittelt, der den Dienst anfordert.
PHP-SOAP-Client Nachdem wir nun einen SOAP-Server mit NuSoap und PHP erstellt haben, müssen wir ihn testen. So wie wir ein SOAP-Serverprogramm erstellt haben, können wir mit NuSoap ein SOAP-Clientprogramm in PHP erstellen. Listing 3 zeigt das Quellprogramm des PHP-SOAP-Clientprogramms.
Nachdem wir nun einen SOAP-Server mit NuSoap und PHP erstellt haben, müssen wir ihn testen. So wie wir ein SOAP-Serverprogramm erstellt haben, können wir mit NuSoap ein SOAP-Clientprogramm in PHP erstellen. Listing 3 zeigt das Quellprogramm des PHP-SOAP-Clientprogramms.
Listing 3: Soapclient.php
<?
include('nusoap.php');
$client = new Soapclient('http://localhost/soapserver.php');
$str = "Diese Zeichenfolge wird umgekehrt";
$params1 = array('str'=>$str);
$reversed = $client->call('reverse',$params1);
echo "Wenn Sie '$str' umkehren, erhalten Sie '$reversed'<br>n"
;
$n2 = 14;
$params2 = array('num1'=>$n1, 'num2'=>$n2);
$added = $client->call('add2numbers', $params2);
echo "Wenn Sie $n1 und $n2 hinzufügen, erhalten Sie $added<br>n";
?>
Um ein PHP-Client-Programm auf einem SOAP-Server zu verwenden, müssen Sie drei Dinge tun. Zuerst müssen Sie ein Soapclient-Objekt erstellen. Das Soapclient-Objekt ist für die Handhabung des Marshallings von Parametern und des SOAP-Protokolls verantwortlich. Soapclient erfordert einen Parameter, der eine URL sein muss. Diese URL kann auf einen HTTP-Endpunkt oder eine WSDL-Beschreibung des tatsächlichen SOAP-Servers verweisen. In unserem Fall handelt es sich um eine URL, die auf unseren PHP-SOAP-Server verweist.
Wenn Sie eine Funktion aufrufen, die Parameter erfordert, müssen Sie zunächst ein Parameterarray erstellen, das eine Reihe von Schlüssel-Wert-Paaren enthält. Der Schlüssel ist der Name des Parameters und der Wert ist der Wert des Parameters.
Wenn Sie eine Funktion aufrufen müssen, verwenden Sie zum Aufrufen das Soapclient-Objekt und übergeben zwei Parameter. Der erste Parameter ist der Name der Funktion, die Sie aufrufen möchten, und der zweite Parameter ist ein Array mit den Parametern der SOAP-Funktion. Die aufrufende Funktion gibt den Wert der von Ihnen aufgerufenen SOAP-Funktion zurück.
Um dieses Beispiel auszuführen, geben Sie einfach die URL zu Soapclient.php in Ihren Webbrowser ein. Sie erhalten eine Ausgabe ähnlich der folgenden:
Wenn Sie „Diese Zeichenfolge wird umgekehrt“ umkehren, erhalten Sie „desrever eb lliw gnirts sihT“. Wenn Sie 5 und 14 addieren, erhalten Sie 19