Zend_Soap_Server
Die Zend_Soap_Server Klasse ist dazu gedacht den Web Service Teil der Entwicklung für
PHP Programmierer zu vereinfachen.
Sie kann in WSDL oder nicht-WSDL Modus verwendet werden, und verwendet Klassen oder Funktionen um
eine Web Service API zu definieren.
Wenn die Zend_Soap_Server Komponente im WSDL Modus arbeitet, verwendet Sie ein bereits vorbereitetes
WSDL Dokument um das Verhalten des Server Objakts und die Optionen des Transport Layers zu definieren.
Ein WSDL Dokument kann automatisch erzeugt werden mit der Funktionalität die von der
Zend_Soap_AutoDiscovery Komponente angeboten wird
oder sollte händisch erzeugt werden durch Verwendung der
Zend_Soap_Wsdl Klasse oder irgendeinem anderen
XML Erstellungstool.
Wenn der nicht-WSDL Modus verwendet wird, müssen alle Protokoll-Optionen gesetzt werden indem der
Options-Mechanismus verwendet wird.
Der Zend_Soap_Server Konstruktor.
Der Contructor von Zend_Soap_Server sollte für WSDL und nicht-WSDL Modi
unterschiedlich verwendet werden.
Der Zend_Soap_Server Konstruktor für den WSDL Modus.
Der Zend_Soap_Server Konstruktor nimmt zwei optionale Parameter wenn er im
WSDL Modus arbeitet:
$wsdl, welcher eine URI einer WSDL Datei ist
Kann später gesetzt werden durch Verwendung der setWsdl($wsdl)
Methode.
.
$options - Optionen für die Erstellung eines SOAP Server Objektes
Optionen können durch Verwendung der setOptions($options)
Methode später gesetzt werden.
.
Die folgenden Optionen werden im WSDL Modus erkannt:
'soap_version' ('soapVersion') - Die zu verwendende SOAP Version
(SOAP_1_1 or SOAP_1_2).
'actor' - Die Aktions-URI für den Server.
'classmap' ('classMap') welche verwendet werden kann um einige
WSDL Typen auf PHP Klassen zu mappen.
Die Option muß ein Array mit WSDL Typen als Schlüssel und Namen von
PHP Klassen als Werte sein.
'encoding' - Interne Zeichen Kodierung (UTF-8 wird immer als externe
Kodierung verwendet).
'wsdl' welcher dem Aufruf von setWsdl($wsdlValue) entspricht.
Der Zend_Soap_Server Konstruktor für den nicht-WSDL Modus.
Der erste Parameter des Konstruktors muß auf
null gesetzt werden wenn man plant die Funktionalität von
Zend_Soap_Server im nicht-WSDL Modus zu verwenden.
Man muß in diesem Fall auch die 'uri' Option setzen (siehe anbei).
Der zweite Parameter des Konstruktors ($options) ist ein Array mit Optionen
um ein SOAP Server Objekt zu erstellen
Optionen können später gesetzt werden indem die setOptions($options)
Methode verwendet wird.
.
Die folgenden Optionen werden im nicht-WSDL Modus erkannt:
'soap_version' ('soapVersion') - Die zu verwendende SOAP Version
(SOAP_1_1 or SOAP_1_2).
'actor' - Die Aktions-URI für den Server.
'classmap' ('classMap') welche verwendet werden kann um einige WSDL Typen auf
PHP Klassen zu mappen.
Die Option muß ein Array mit WSDL Typen als Schlüssel und Namen von
PHP Klassen als Werte sein.
'encoding' - Interne Zeichen Kodierung (UTF-8 wird immer als externe
Kodierung verwendet).
'uri' (benötigt) - URI Namespace für den SOAP Server.
Methoden um eine Web Service API zu definieren.
Es gibt zwei Wege um eine Web Service API zu definieren wenn man Zugriff auf den eigenen PHP Code
über SOAP geben will.
Der Erste ist das Anfügen einer Klasse zum Zend_Soap_Server Objekt welche eine
Web Service API komplett beschreibt:
setClass('MyClass');
// Binden eines bereits initialisierten Objekts an den Soap Server
$server->setObject(new MyClass());
...
$server->handle();
]]>Wichtig!
Jede Methode sollte komplett beschrieben sein indem Docblocks für Methoden verwendet werden
wenn man plant die Autodiscovery Funktionalität zu verwenden um ein entsprechendes Web
Service WSDL vorzubereiten.
Die zweite Methode der Definition einer Web Service API ist die Verwendung eines Sets von
Funktionen und addFunction() oder loadFunctions() Methoden:
addFunction('function1');
$server->addFunction('function2');
...
$server->handle();
]]>Anfragen und Antwort Objekte behandeln.Fortgeschritten
Dieser Abschnitt beschreibt das fortgeschrittene bearbeiten von Anfrage-/Antwort-Optionen
und kann übersprungen werden.
Die Zend_Soap_Server Komponente führt Anfrage/Antwort-Bearbeitung automatisch durch. Sie
erlaubt es aber diese zu fangen und Vor- und Nach-bearbeitungen durchzuführen.
Anfrage Bearbeitung.
Die Zend_Soap_Server::handle() Methode nimmt Anfragen vom Standard-Eingabe Stream
('php://input') entgegen. Sie kann übergangen werden durch die Angabe von optionalen Parametern
an die handle() Methode oder durch setzen einer Anfrage durch Verwendung der
setRequest() Methode:
handle($request);
...
// Eine Anfrage setzen durch Verwendung der setRequest() Methode
$server->setRequest();
$server->handle();
]]>
Anfrage Objekte können dargestellt werden durch Verwendung der folgenden Dinge:
DOMDocument (gecastet zu XML)
DOMNode (Besitzer Dokument wird genommen und zu XML gecastet)
SimpleXMLElement (gecasted zu XML)
stdClass (__toString() wird aufgerufen und geprüft ob es gültiges XML ist)
string (geprüft ob es gültiges XML ist)
Die zuletzt bearbeitete Anfrage kann durch Verwendung der getLastRequest()
Methode als XML String empfangen werden:
handle();
$request = $server->getLastRequest();
]]>Antworten vor-bearbeiten.
Die Zend_Soap_Server::handle() Methode wirft die erzeugte Antwort automatisch
auf den Ausgabe Stream aus. Das kann durch Verwendung von setReturnResponse()
mit true oder false als Parameter blockiert werden
Der aktuelle Status des Rückgabe Antwort Flags kann mit der
setReturnResponse() Methode abgefragt werden.
.
Die erzeugte Antwort wird in diesem Fall durch die handle() Methode zurückgegeben.
setReturnResponse(true);
...
$response = $server->handle();
...
]]>
Die letzte Antwort kann auch mit der getLastResponse() Methode empfangen werden
um Vor-Bearbeitungen durchzuführen:
handle();
$response = $server->getLastResponse();
...
]]>