In diesem Dokument wird beschrieben, wie Sie NuSOAP erhalten und installieren. Anschließend werden einige Beispiele zur Veranschaulichung der Funktionen von NuSOAP bereitgestellt. Dies ist keine umfassende Einführung in NuSOAP, aber wir hoffen, dass einige PHP-Entwickler eine gute Einführung erhalten.
NuSOAP ist eine Reihe von PHP-Klassen, die es Entwicklern ermöglichen, SOAP-Webdienste zu erstellen und zu verwenden. Es ist keine Installation von PHP-Erweiterungen erforderlich. Es wurde am 3. Dezember 2004 entwickelt und die aktuelle Version ist NuSOAP (0.6.7). Es unterstützt die SOAP 1.1-Spezifikation, kann WSDL 1.1 erstellen und verwenden und unterstützt außerdem rpc/encoded- und document/literal-Dienste. Es ist jedoch wichtig zu beachten, dass NuSOAP keine vollständige Implementierung wie .NET und Apache Axis bietet.
Hallo Welt
Ich beginne mit dem „Hello, World“-Beispiel und schreibe grundlegenden NuSOAP-Client- und Servercode.
Beginnen wir zunächst mit der Serverseite, denn ohne die Serverseite macht es keinen Sinn, die Clientseite zu haben. Wir werden eine SOAP-Methode namens Hello schreiben, die einen einzelnen Parameter akzeptiert und einen String zurückgibt. Wir hoffen, dass die Kommentare im Code nützliche Anweisungen liefern.
<?php
// Ziehen Sie den NuSOAP-Code ein
require_once('nusoap.php');
// Serverinstanz erstellen
$server = neuer Soap_server;
// Registrieren Sie die Methode, die verfügbar gemacht werden soll
$server->register('hello');
// Methode als PHP-Funktion definieren
Funktion hallo($name) {
return 'Hallo,' $name;
}
// Verwenden Sie die Anfrage, um den Dienst aufzurufen (zu versuchen).
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) : '';
$server->service($HTTP_RAW_POST_DATA);
?>
Das Folgende ist der Client-Code. Es gibt einige wichtige Dinge, die Sie beachten sollten: Beim Erstellen der Instanz-Soapclient müssen Sie zunächst eine Dienst-URL als Parameter angeben. In diesem Beispiel wird auf helloworld.php über http:// zugegriffen. localhost/phphack von. Natürlich werden die Dienste, die Sie verwenden möchten, in unterschiedlichen URLs platziert. Zweitens ist der erste Parameter beim Aufrufen des Dienstes der Name des Dienstes, der mit einem gültigen Methodennamen übereinstimmen muss (bei einigen Servern wird die Groß-/Kleinschreibung beachtet). In diesem Beispiel muss es mit der bereits in helloworld.php registrierten Methode übereinstimmen. Der zweite Parameter schließlich ist ein Array, das als Parameter an die SOAP-Dienstmethode übergeben wird. Da die Hello-Methode in helloworld.php nur einen Parameter hat, hat das Array nur ein Element.
<?php
// Ziehen Sie den NuSOAP-Code ein
require_once('nusoap.php');
// Erstellen Sie die Client-Instanz
$client = neuer Soapclient('http://localhost/phphack/helloworld.php');
// Rufen Sie die SOAP-Methode auf
$result = $client->call('hello', array('name' => 'Scott'));
// Ergebnis anzeigen
print_r($result);
?>
Debuggen
Beim Programmieren müssen Sie immer dann debuggen, wenn etwas schief geht. NuSOAP bietet eine Reihe von Tools, die Ihnen dabei helfen. Die Informationen, die Sie beim Debuggen von NuSOAP überprüfen müssen, sind die gesendeten Anforderungsinformationen und die entsprechenden zurückgegebenen Informationen. Mit der Client-Klasse von NuSOAP können Sie diese Informationen über ihre beiden Mitglieder anzeigen. Hier ist zum Beispiel eine modifizierte Version von helloworldclient.php, die die Anfrage und Antwort zeigt. Im nächsten Abschnitt werde ich die im Clientcode angezeigten Anforderungs- und Antwortinformationen überprüfen.
<?php
// Ziehen Sie den NuSOAP-Code ein
require_once('nusoap.php');
// Erstellen Sie die Client-Instanz
$client = neuer Soapclient('http://localhost/phphack/helloworld.php');
// Rufen Sie die SOAP-Methode auf
$result = $client->call('hello', array('name' => 'Scott'));
// Ergebnis anzeigen
print_r($result);
// Anfrage und Antwort anzeigen
echo '<h2>Anfrage</h2>';
echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) .
echo '<h2>Antwort</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) '</pre>';
?>
NuSOAP bietet außerdem eine Methode zum Anzeigen von Debugging-Informationen über Protokolle mithilfe seiner Klassen. Durch das Hinzufügen des folgenden Codes werden ausführliche Debugging-Informationen angezeigt. Leider muss die Beschreibung der Ausgabe dem Leser überlassen werden.
// Debug-Meldungen anzeigen
echo '<h2>Debug</h2>';
echo '<pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) '</pre>';
Interessanterweise stehen diese Debugging-Informationen am Ende des entsprechenden SOAP-Formats wird angezeigt, damit es im Client angezeigt werden kann. Das serverseitige Debuggen sieht folgendermaßen aus:
<?php
// Ziehen Sie den NuSOAP-Code ein
require_once('nusoap.php');
// Debuggen aktivieren *bevor* die Serverinstanz erstellt wird
$debug = 1;
// Serverinstanz erstellen
$server = neuer Soap_server;
// Registrieren Sie die Methode, die verfügbar gemacht werden soll
$server->register('hello');
// Methode als PHP-Funktion definieren
Funktion hallo($name) {
return 'Hallo,' $name;
}
// Verwenden Sie die Anfrage, um den Dienst aufzurufen (zu versuchen).
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) : '';
$server->service($HTTP_RAW_POST_DATA);
?>
Die dritte Methode des Debuggens ist nicht wirklich Debuggen, sondern eine gute Programmierpraxis. Das obige Beispiel führt beim Aufruf von SOAP keine Fehlerprüfung durch. Ein robusterer Client würde so aussehen:
<?php
// Ziehen Sie den NuSOAP-Code ein
require_once('nusoap.php');
// Erstellen Sie die Client-Instanz
$client = neuer Soapclient('http://localhost/phphack/helloworld.php');
// Auf einen Fehler prüfen
$err = $client->getError();
if ($err) {
// Den Fehler anzeigen
echo '<p><b>Konstruktorfehler: ' $err .
// An diesem Punkt wissen Sie, dass der folgende Aufruf fehlschlagen wird
}
// Rufen Sie die SOAP-Methode auf
$result = $client->call('hello', array('name' => 'Scott'));
// Auf einen Fehler prüfen
if ($client->fault) {
echo '<p><b>Fehler: ';
print_r($result);
echo '</b></p>';
} anders {
// Auf Fehler prüfen
$err = $client->getError();
if ($err) {
// Den Fehler anzeigen
echo '<p><b>Fehler: ' $err .
} anders {
// Ergebnis anzeigen
print_r($result);
}
}
?>
Um den Code zu testen, müssen Sie einen Fehler verursachen, z. B. den Namen der aufgerufenen Methode „hello“ in „goodbye“ ändern.
Anfrage und Antwort
Ich habe im obigen Beispiel gezeigt, wie einfach es ist, SOAP-Anfrage- und Antwortinformationen anzuzeigen. Hier sind die Anfrageinformationen für hello2client.php:
POST /phphack/helloworld2.php HTTP/1.0
Host: localhost
Benutzeragent: NuSOAP/0.6.8 (1.81)
Inhaltstyp: text/xml; charset=ISO-8859-1
SOAPAction: „“
Inhaltslänge: 538
<?xml version="1.0"kodierung="ISO-8859-1"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/ "
xmlns:SOAP-ENV=" http://schemas.xmlsoap.org/soap/envelope/ "
xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
xmlns:SOAP-ENC=" http://schemas.xmlsoap.org/soap/encoding/ "
xmlns:si=" http://soapinterop.org/xsd ">
<SOAP-ENV:Body>
<ns1:hello xmlns:ns1=" http://testuri.org ">
<name xsi:type="xsd:string">Scott</name>
</ns1:hello>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
In den HTTP-Headern sehen Sie, dass SOAPAction eine leere Zeichenfolge ist, was der Standardwert ist. Ihre Dienstmethode kann den Wert von SOAPAction festlegen und Ihr Clientcode kann die Methode aufrufen, indem Sie SOAPAction als Parameter angeben.
In der XML-Nutzlast können Sie sehen, dass NuSOAP die bekannte ISO-8859-1-Kodierung als Latin-1 verwendet. Um eine andere Kodierung anzugeben, können Sie das Attribut „soap_defencoding“ auf der Client-Soapclient-Instanz festlegen. Es liegt natürlich in der Verantwortung des Programmierers, Parameterdaten mit der angegebenen Kodierung zu kodieren. Glücklicherweise bietet PHP viele Funktionen zum Kodieren und Dekodieren der gängigsten Kodierungsdaten in SOAP, wie z. B. UTF-8.
Zu beachten ist außerdem, dass das Element die aufzurufende Methode angibt. Das Element mit dem Namen „hello“ wird unter dem Domänennamen http://tempuri.org platziert. Die Angabe des echten Domänennamens ist eine bewährte Vorgehensweise und wird auch bei vielen Diensten häufig verwendet . Es ist notwendig. Ein zukünftiges Dokument wird hier angezeigt:
Der SOAP-Dienst antwortet wie folgt:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Datum: Mi, 03. November 2004 21:32:34 GMT
X-Powered-By: ASP.NET
X-Powered-By: PHP/4.3.4
Server: NuSOAP Server v0.6.8
X-SOAP-Server: NuSOAP/0.6.8 (1.81)
Inhaltstyp: text/xml; charset=ISO-8859-1
Inhaltslänge: 556
<?xml version="1.0"kodierung="ISO-8859-1"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/ "
xmlns:SOAP-ENV=" http://schemas.xmlsoap.org/soap/envelope/ "
xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
xmlns:SOAP-ENC=" http://schemas.xmlsoap.org/soap/encoding/ "
xmlns:si=" http://soapinterop.org/xsd ">
<SOAP-ENV:Body>
<ns1:helloResponse xmlns:ns1=" http://tempuri.org ">
<return xsi:type="xsd:string">Hallo, Scott</return>
</helloResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>