1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 21824 -->
4 <sect1 id="zend.soap.server">
5 <title>Zend_Soap_Server</title>
8 Die <classname>Zend_Soap_Server</classname> Klasse ist dazu gedacht den Web Service Teil der
9 Entwicklung für <acronym>PHP</acronym> Programmierer zu vereinfachen.
13 Sie kann in WSDL oder nicht-WSDL Modus verwendet werden, und verwendet Klassen oder
14 Funktionen um eine Web Service <acronym>API</acronym> zu definieren.
18 Wenn die <classname>Zend_Soap_Server</classname> Komponente im WSDL Modus arbeitet,
19 verwendet Sie ein bereits vorbereitetes WSDL Dokument um das Verhalten des Server Objekts
20 und die Optionen des Transport Layers zu definieren.
24 Ein WSDL Dokument kann automatisch erzeugt werden mit der Funktionalität die von der <link
25 linkend="zend.soap.autodiscovery.introduction">Zend_Soap_AutoDiscovery Komponente</link>
26 angeboten wird sollte händisch erzeugt werden durch Verwendung der <link
27 linkend="zend.soap.wsdl"><classname>Zend_Soap_Wsdl</classname> Klasse</link> oder
28 irgendeinem anderen <acronym>XML</acronym> Erstellungstool.
32 Wenn der nicht-WSDL Modus verwendet wird, müssen alle Protokoll-Optionen gesetzt werden
33 indem der Options-Mechanismus verwendet wird.
36 <sect2 id="zend.soap.server.constructor">
37 <title>Der Zend_Soap_Server Konstruktor</title>
40 Der Contructor von <classname>Zend_Soap_Server</classname> sollte für WSDL und
41 nicht-WSDL Modi unterschiedlich verwendet werden.
44 <sect3 id="zend.soap.server.constructor.wsdl_mode">
45 <title>Der Zend_Soap_Server Konstruktor für den WSDL Modus</title>
48 Der <classname>Zend_Soap_Server</classname> Konstruktor nimmt zwei optionale
49 Parameter wenn er im WSDL Modus arbeitet:
54 <varname>$wsdl</varname>, welcher eine <acronym>URI</acronym> einer
59 Kann später gesetzt werden durch Verwendung der
60 <methodname>setWsdl($wsdl)</methodname> Methode.
68 <varname>$options</varname> - Optionen für die Erstellung eines
69 <acronym>SOAP</acronym> Server Objektes
73 Optionen können durch Verwendung der
74 <methodname>setOptions($options)</methodname> Methode später
81 Die folgenden Optionen werden im WSDL Modus erkannt:
86 'soap_version' ('soapVersion') - Die zu verwendende SOAP
87 Version (SOAP_1_1 or <acronym>SOAP</acronym>_1_2).
93 'actor' - Die Aktions-<acronym>URI</acronym> für den Server.
99 'classmap' ('classMap') welche verwendet werden kann um
100 einige WSDL Typen auf <acronym>PHP</acronym> Klassen zu
105 Die Option muß ein Array mit WSDL Typen als Schlüssel und
106 Namen von <acronym>PHP</acronym> Klassen als Werte sein.
112 'encoding' - Interne Zeichen Kodierung (UTF-8 wird immer als
113 externe Kodierung verwendet).
119 'wsdl' welcher dem Aufruf von
120 <methodname>setWsdl($wsdlValue)</methodname> entspricht.
130 <sect3 id="zend.soap.server.wsdl_mode">
131 <title>Der Zend_Soap_Server Konstruktor für den nicht-WSDL Modus</title>
134 Der erste Parameter des Konstruktors <emphasis>muß</emphasis> auf
135 <constant>NULL</constant> gesetzt werden wenn man plant die Funktionalität von
136 <classname>Zend_Soap_Server</classname> im nicht-WSDL Modus zu verwenden.
140 Man muß in diesem Fall auch die 'uri' Option setzen (siehe anbei).
144 Der zweite Parameter des Konstruktors (<varname>$options</varname>) ist ein Array
145 mit Optionen um ein <acronym>SOAP</acronym> Server Objekt zu erstellen
149 Optionen können später gesetzt werden indem die
150 <methodname>setOptions($options)</methodname> Methode verwendet wird.
156 Die folgenden Optionen werden im nicht-WSDL Modus erkannt:
161 'soap_version' ('soapVersion') - Die zu verwendende SOAP Version
162 (SOAP_1_1 or <acronym>SOAP</acronym>_1_2).
168 'actor' - Die Aktions-<acronym>URI</acronym> für den Server.
174 'classmap' ('classMap') welche verwendet werden kann um einige WSDL
175 Typen auf <acronym>PHP</acronym> Klassen zu mappen.
179 Die Option muß ein Array mit WSDL Typen als Schlüssel und Namen von
180 <acronym>PHP</acronym> Klassen als Werte sein.
186 'encoding' - Interne Zeichen Kodierung (UTF-8 wird immer als externe
187 Kodierung verwendet).
193 'uri' (benötigt) - <acronym>URI</acronym> Namespace für den
194 <acronym>SOAP</acronym> Server.
202 <sect2 id="zend.soap.server.api_define_methods">
203 <title>Methoden um eine Web Service API zu definieren</title>
206 Es gibt zwei Wege um eine Web Service <acronym>API</acronym> zu definieren wenn man
207 Zugriff auf den eigenen <acronym>PHP</acronym> Code über <acronym>SOAP</acronym> geben
212 Der Erste ist das Anfügen einer Klasse zum <classname>Zend_Soap_Server</classname>
213 Objekt welche eine Web Service <acronym>API</acronym> komplett beschreibt:
214 <programlisting language="php"><![CDATA[
218 * Diese Methode nimmt ...
220 * @param integer $inputParam
223 public function method1($inputParam) {
228 * Diese Methode nimmt ...
230 * @param integer $inputParam1
231 * @param string $inputParam2
234 public function method2($inputParam1, $inputParam2) {
241 $server = new Zend_Soap_Server(null, $options);
242 // Die Klasse an den Soap Server binden
243 $server->setClass('MyClass');
244 // Binden eines bereits initialisierten Objekts an den Soap Server
245 $server->setObject(new MyClass());
251 <title>Wichtig!</title>
254 Jede Methode sollte komplett beschrieben sein indem Docblocks für Methoden
255 verwendet werden wenn man plant die Autodiscovery Funktionalität zu verwenden um
256 ein entsprechendes Web Service WSDL vorzubereiten.
262 Die zweite Methode der Definition einer Web Service <acronym>API</acronym> ist die
263 Verwendung eines Sets von Funktionen und <methodname>addFunction()</methodname> oder
264 <methodname>loadFunctions()</methodname> Methoden:
266 <programlisting language="php"><![CDATA[
271 * @param integer $inputParam
274 function function1($inputParam) {
281 * @param integer $inputParam1
282 * @param string $inputParam2
285 function function2($inputParam1, $inputParam2) {
289 $server = new Zend_Soap_Server(null, $options);
290 $server->addFunction('function1');
291 $server->addFunction('function2');
298 <sect2 id="zend.soap.server.request_response">
299 <title>Anfragen und Antwort Objekte behandeln</title>
302 <title>Fortgeschritten</title>
305 Dieser Abschnitt beschreibt das fortgeschrittene bearbeiten von
306 Anfrage-/Antwort-Optionen und kann übersprungen werden.
311 Die <classname>Zend_Soap_Server</classname> Komponente führt Anfrage/Antwort-Bearbeitung
312 automatisch durch. Sie erlaubt es aber diese zu fangen und Vor- und Nach-bearbeitungen
316 <sect3 id="zend.soap.server.request_response.request">
317 <title>Anfrage Bearbeitung</title>
320 Die <methodname>Zend_Soap_Server::handle()</methodname> Methode nimmt Anfragen vom
321 Standard-Eingabe Stream ('php://input') entgegen. Sie kann übergangen werden durch
322 die Angabe von optionalen Parametern an die <methodname>handle()</methodname>
323 Methode oder durch setzen einer Anfrage durch Verwendung der
324 <methodname>setRequest()</methodname> Methode:
325 <programlisting language="php"><![CDATA[
327 $server = new Zend_Soap_Server(...);
329 // Eine Anfrage setzen durch Verwendung des optionalen $request Parameters
330 $server->handle($request);
332 // Eine Anfrage setzen durch Verwendung der setRequest() Methode
333 $server->setRequest();
339 Anfrage Objekte können dargestellt werden durch Verwendung der folgenden Dinge:
344 DOMDocument (gecastet zu <acronym>XML</acronym>)
350 DOMNode (Besitzer Dokument wird genommen und zu <acronym>XML</acronym>
357 SimpleXMLElement (gecasted zu <acronym>XML</acronym>)
363 stdClass (__toString() wird aufgerufen und geprüft ob es gültiges
364 <acronym>XML</acronym> ist)
370 string (geprüft ob es gültiges <acronym>XML</acronym> ist)
377 Die zuletzt bearbeitete Anfrage kann durch Verwendung der
378 <methodname>getLastRequest()</methodname> Methode als <acronym>XML</acronym> String
381 <programlisting language="php"><![CDATA[
383 $server = new Zend_Soap_Server(...);
386 $request = $server->getLastRequest();
391 <sect3 id="zend.soap.server.request_response.response">
392 <title>Antworten vor-bearbeiten</title>
395 Die <methodname>Zend_Soap_Server::handle()</methodname> Methode wirft die erzeugte
396 Antwort automatisch auf den Ausgabe Stream aus. Das kann durch Verwendung von
397 <methodname>setReturnResponse()</methodname> mit <constant>TRUE</constant> oder
398 <constant>FALSE</constant> als Parameter blockiert werden
402 Der aktuelle Status des Rückgabe Antwort Flags kann mit der
403 <methodname>setReturnResponse()</methodname> Methode abgefragt werden.
407 Die erzeugte Antwort wird in diesem Fall durch die <methodname>handle()</methodname>
408 Methode zurückgegeben.
410 <programlisting language="php"><![CDATA[
412 $server = new Zend_Soap_Server(...);
414 // Eine Antwort als Rückgabewert der handle() Methode
415 // erhalten statt diese auf den Ausgabe Stream zu werfen
416 $server->setReturnResponse(true);
418 $response = $server->handle();
424 Die letzte Antwort kann auch mit der <methodname>getLastResponse()</methodname>
425 Methode empfangen werden um Vor-Bearbeitungen durchzuführen:
427 <programlisting language="php"><![CDATA[
429 $server = new Zend_Soap_Server(...);
432 $response = $server->getLastResponse();