Zend_Soap_Server.xml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15234 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.soap.server">
  5. <title>Zend_Soap_Server</title>
  6. <para>
  7. Die <classname>Zend_Soap_Server</classname> Klasse ist dazu gedacht den Web Service Teil der Entwicklung für
  8. PHP Programmierer zu vereinfachen.
  9. </para>
  10. <para>
  11. Sie kann in WSDL oder nicht-WSDL Modus verwendet werden, und verwendet Klassen oder Funktionen um
  12. eine Web Service API zu definieren.
  13. </para>
  14. <para>
  15. Wenn die Zend_Soap_Server Komponente im WSDL Modus arbeitet, verwendet Sie ein bereits vorbereitetes
  16. WSDL Dokument um das Verhalten des Server Objakts und die Optionen des Transport Layers zu definieren.
  17. </para>
  18. <para>
  19. Ein WSDL Dokument kann automatisch erzeugt werden mit der Funktionalität die von der
  20. <link linkend="zend.soap.autodiscovery.introduction">Zend_Soap_AutoDiscovery Komponente</link> angeboten wird
  21. oder sollte händisch erzeugt werden durch Verwendung der
  22. <link linkend="zend.soap.wsdl"><classname>Zend_Soap_Wsdl</classname> Klasse</link> oder irgendeinem anderen
  23. XML Erstellungstool.
  24. </para>
  25. <para>
  26. Wenn der nicht-WSDL Modus verwendet wird, müssen alle Protokoll-Optionen gesetzt werden indem der
  27. Options-Mechanismus verwendet wird.
  28. </para>
  29. <sect2 id="zend.soap.server.constructor">
  30. <title>Der Zend_Soap_Server Konstruktor.</title>
  31. <para>
  32. Der Contructor von <classname>Zend_Soap_Server</classname> sollte für WSDL und nicht-WSDL Modi
  33. unterschiedlich verwendet werden.
  34. </para>
  35. <sect3 id="zend.soap.server.constructor.wsdl_mode">
  36. <title>Der Zend_Soap_Server Konstruktor für den WSDL Modus.</title>
  37. <para>
  38. Der <classname>Zend_Soap_Server</classname> Konstruktor nimmt zwei optionale Parameter wenn er im
  39. WSDL Modus arbeitet:
  40. <orderedlist>
  41. <listitem>
  42. <para>
  43. <code>$wsdl</code>, welcher eine URI einer WSDL Datei ist
  44. <footnote>
  45. <para>
  46. Kann später gesetzt werden durch Verwendung der <code>setWsdl($wsdl)</code>
  47. Methode.
  48. </para>
  49. </footnote>.
  50. </para>
  51. </listitem>
  52. <listitem>
  53. <para>
  54. <code>$options</code> - Optionen für die Erstellung eines SOAP Server Objektes
  55. <footnote>
  56. <para>
  57. Optionen können durch Verwendung der <code>setOptions($options)</code>
  58. Methode später gesetzt werden.
  59. </para>
  60. </footnote>.
  61. </para>
  62. <para>
  63. Die folgenden Optionen werden im WSDL Modus erkannt:
  64. <itemizedlist>
  65. <listitem>
  66. <para>
  67. 'soap_version' ('soapVersion') - Die zu verwendende SOAP Version
  68. (SOAP_1_1 or SOAP_1_2).
  69. </para>
  70. </listitem>
  71. <listitem>
  72. <para>
  73. 'actor' - Die Aktions-URI für den Server.
  74. </para>
  75. </listitem>
  76. <listitem>
  77. <para>
  78. 'classmap' ('classMap') welche verwendet werden kann um einige
  79. WSDL Typen auf PHP Klassen zu mappen.
  80. </para>
  81. <para>
  82. Die Option muß ein Array mit WSDL Typen als Schlüssel und Namen von
  83. PHP Klassen als Werte sein.
  84. </para>
  85. </listitem>
  86. <listitem>
  87. <para>
  88. 'encoding' - Interne Zeichen Kodierung (UTF-8 wird immer als externe
  89. Kodierung verwendet).
  90. </para>
  91. </listitem>
  92. <listitem>
  93. <para>
  94. 'wsdl' welcher dem Aufruf von <code>setWsdl($wsdlValue)</code> entspricht.
  95. </para>
  96. </listitem>
  97. </itemizedlist>
  98. </para>
  99. </listitem>
  100. </orderedlist>
  101. </para>
  102. </sect3>
  103. <sect3 id="zend.soap.server.wsdl_mode">
  104. <title>Der Zend_Soap_Server Konstruktor für den nicht-WSDL Modus.</title>
  105. <para>
  106. Der erste Parameter des Konstruktors <emphasis role="strong">muß</emphasis> auf
  107. <code>null</code> gesetzt werden wenn man plant die Funktionalität von
  108. <classname>Zend_Soap_Server</classname> im nicht-WSDL Modus zu verwenden.
  109. </para>
  110. <para>
  111. Man muß in diesem Fall auch die 'uri' Option setzen (siehe anbei).
  112. </para>
  113. <para>
  114. Der zweite Parameter des Konstruktors (<code>$options</code>) ist ein Array mit Optionen
  115. um ein SOAP Server Objekt zu erstellen
  116. <footnote>
  117. <para>
  118. Optionen können später gesetzt werden indem die <code>setOptions($options)</code>
  119. Methode verwendet wird.
  120. </para>
  121. </footnote>.
  122. </para>
  123. <para>
  124. Die folgenden Optionen werden im nicht-WSDL Modus erkannt:
  125. <itemizedlist>
  126. <listitem>
  127. <para>
  128. 'soap_version' ('soapVersion') - Die zu verwendende SOAP Version
  129. (SOAP_1_1 or SOAP_1_2).
  130. </para>
  131. </listitem>
  132. <listitem>
  133. <para>
  134. 'actor' - Die Aktions-URI für den Server.
  135. </para>
  136. </listitem>
  137. <listitem>
  138. <para>
  139. 'classmap' ('classMap') welche verwendet werden kann um einige WSDL Typen auf
  140. PHP Klassen zu mappen.
  141. </para>
  142. <para>
  143. Die Option muß ein Array mit WSDL Typen als Schlüssel und Namen von
  144. PHP Klassen als Werte sein.
  145. </para>
  146. </listitem>
  147. <listitem>
  148. <para>
  149. 'encoding' - Interne Zeichen Kodierung (UTF-8 wird immer als externe
  150. Kodierung verwendet).
  151. </para>
  152. </listitem>
  153. <listitem>
  154. <para>
  155. 'uri' (benötigt) - URI Namespace für den SOAP Server.
  156. </para>
  157. </listitem>
  158. </itemizedlist>
  159. </para>
  160. </sect3>
  161. </sect2>
  162. <sect2 id="zend.soap.server.api_define_methods">
  163. <title>Methoden um eine Web Service API zu definieren.</title>
  164. <para>
  165. Es gibt zwei Wege um eine Web Service API zu definieren wenn man Zugriff auf den eigenen PHP Code
  166. über SOAP geben will.
  167. </para>
  168. <para>
  169. Der Erste ist das Anfügen einer Klasse zum <classname>Zend_Soap_Server</classname> Objekt welche eine
  170. Web Service API komplett beschreibt:
  171. <programlisting role="php"><![CDATA[
  172. ...
  173. class MyClass {
  174. /**
  175. * Diese Methode nimmt ...
  176. *
  177. * @param integer $inputParam
  178. * @return string
  179. */
  180. public function method1($inputParam) {
  181. ...
  182. }
  183. /**
  184. * Diese Methode nimmt ...
  185. *
  186. * @param integer $inputParam1
  187. * @param string $inputParam2
  188. * @return float
  189. */
  190. public function method2($inputParam1, $inputParam2) {
  191. ...
  192. }
  193. ...
  194. }
  195. ...
  196. $server = new Zend_Soap_Server(null, $options);
  197. // Die Klasse an den Soap Server binden
  198. $server->setClass('MyClass');
  199. // Binden eines bereits initialisierten Objekts an den Soap Server
  200. $server->setObject(new MyClass());
  201. ...
  202. $server->handle();
  203. ]]></programlisting>
  204. <note>
  205. <title>Wichtig!</title>
  206. <para>
  207. Jede Methode sollte komplett beschrieben sein indem Docblocks für Methoden verwendet werden
  208. wenn man plant die Autodiscovery Funktionalität zu verwenden um ein entsprechendes Web
  209. Service WSDL vorzubereiten.
  210. </para>
  211. </note>
  212. </para>
  213. <para>
  214. Die zweite Methode der Definition einer Web Service API ist die Verwendung eines Sets von
  215. Funktionen und <code>addFunction()</code> oder <code>loadFunctions()</code> Methoden:
  216. <programlisting role="php"><![CDATA[
  217. ...
  218. /**
  219. * Diese Funktion ...
  220. *
  221. * @param integer $inputParam
  222. * @return string
  223. */
  224. function function1($inputParam) {
  225. ...
  226. }
  227. /**
  228. * Diese Funktion ...
  229. *
  230. * @param integer $inputParam1
  231. * @param string $inputParam2
  232. * @return float
  233. */
  234. function function2($inputParam1, $inputParam2) {
  235. ...
  236. }
  237. ...
  238. $server = new Zend_Soap_Server(null, $options);
  239. $server->addFunction('function1');
  240. $server->addFunction('function2');
  241. ...
  242. $server->handle();
  243. ]]></programlisting>
  244. </para>
  245. </sect2>
  246. <sect2 id="zend.soap.server.request_response">
  247. <title>Anfragen und Antwort Objekte behandeln.</title>
  248. <note>
  249. <title>Fortgeschritten</title>
  250. <para>
  251. Dieser Abschnitt beschreibt das fortgeschrittene bearbeiten von Anfrage-/Antwort-Optionen
  252. und kann übersprungen werden.
  253. </para>
  254. </note>
  255. <para>
  256. Die Zend_Soap_Server Komponente führt Anfrage/Antwort-Bearbeitung automatisch durch. Sie
  257. erlaubt es aber diese zu fangen und Vor- und Nach-bearbeitungen durchzuführen.
  258. </para>
  259. <sect3 id="zend.soap.server.request_response.request">
  260. <title>Anfrage Bearbeitung.</title>
  261. <para>
  262. Die <classname>Zend_Soap_Server::handle()</classname> Methode nimmt Anfragen vom Standard-Eingabe Stream
  263. ('php://input') entgegen. Sie kann übergangen werden durch die Angabe von optionalen Parametern
  264. an die <code>handle()</code> Methode oder durch setzen einer Anfrage durch Verwendung der
  265. <code>setRequest()</code> Methode:
  266. <programlisting role="php"><![CDATA[
  267. ...
  268. $server = new Zend_Soap_Server(...);
  269. ...
  270. // Eine Anfrage setzen durch Verwendung des optionalen $request Parameters
  271. $server->handle($request);
  272. ...
  273. // Eine Anfrage setzen durch Verwendung der setRequest() Methode
  274. $server->setRequest();
  275. $server->handle();
  276. ]]></programlisting>
  277. </para>
  278. <para>
  279. Anfrage Objekte können dargestellt werden durch Verwendung der folgenden Dinge:
  280. <itemizedlist>
  281. <listitem>
  282. <para>
  283. DOMDocument (gecastet zu XML)
  284. </para>
  285. </listitem>
  286. <listitem>
  287. <para>
  288. DOMNode (Besitzer Dokument wird genommen und zu XML gecastet)
  289. </para>
  290. </listitem>
  291. <listitem>
  292. <para>
  293. SimpleXMLElement (gecasted zu XML)
  294. </para>
  295. </listitem>
  296. <listitem>
  297. <para>
  298. stdClass (__toString() wird aufgerufen und geprüft ob es gültiges XML ist)
  299. </para>
  300. </listitem>
  301. <listitem>
  302. <para>
  303. string (geprüft ob es gültiges XML ist)
  304. </para>
  305. </listitem>
  306. </itemizedlist>
  307. </para>
  308. <para>
  309. Die zuletzt bearbeitete Anfrage kann durch Verwendung der <code>getLastRequest()</code>
  310. Methode als XML String empfangen werden:
  311. <programlisting role="php"><![CDATA[
  312. ...
  313. $server = new Zend_Soap_Server(...);
  314. ...
  315. $server->handle();
  316. $request = $server->getLastRequest();
  317. ]]></programlisting>
  318. </para>
  319. </sect3>
  320. <sect3 id="zend.soap.server.request_response.response">
  321. <title>Antworten vor-bearbeiten.</title>
  322. <para>
  323. Die <classname>Zend_Soap_Server::handle()</classname> Methode wirft die erzeugte Antwort automatisch
  324. auf den Ausgabe Stream aus. Das kann durch Verwendung von <code>setReturnResponse()</code>
  325. mit <code>true</code> oder <code>false</code> als Parameter blockiert werden
  326. <footnote>
  327. <para>
  328. Der aktuelle Status des Rückgabe Antwort Flags kann mit der
  329. <code>setReturnResponse()</code> Methode abgefragt werden.
  330. </para>
  331. </footnote>.
  332. Die erzeugte Antwort wird in diesem Fall durch die <code>handle()</code> Methode zurückgegeben.
  333. <programlisting role="php"><![CDATA[
  334. ...
  335. $server = new Zend_Soap_Server(...);
  336. ...
  337. // Eine Antwort als Rückgabewert der handle() Methode
  338. // erhalten statt diese auf den Ausgabe Stream zu werfen
  339. $server->setReturnResponse(true);
  340. ...
  341. $response = $server->handle();
  342. ...
  343. ]]></programlisting>
  344. </para>
  345. <para>
  346. Die letzte Antwort kann auch mit der <code>getLastResponse()</code> Methode empfangen werden
  347. um Vor-Bearbeitungen durchzuführen:
  348. <programlisting role="php"><![CDATA[
  349. ...
  350. $server = new Zend_Soap_Server(...);
  351. ...
  352. $server->handle();
  353. $response = $server->getLastResponse();
  354. ...
  355. ]]></programlisting>
  356. </para>
  357. </sect3>
  358. </sect2>
  359. </sect1>