Zend_Soap_Server.xml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 14978 -->
  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 <classname>Zend_Soap_Server</classname> 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 <classname>Zend_Soap_Server</classname> 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 <classname>Zend_Soap_Server</classname> 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. ]]>
  204. </programlisting>
  205. <note>
  206. <title>Wichtig!</title>
  207. <para>
  208. Jede Methode sollte komplett beschrieben sein indem Docblocks für Methoden verwendet werden
  209. wenn man plant die Autodiscovery Funktionalität zu verwenden um ein entsprechendes Web
  210. Service WSDL vorzubereiten.
  211. </para>
  212. </note>
  213. </para>
  214. <para>
  215. Die zweite Methode der Definition einer Web Service API ist die Verwendung eines Sets von
  216. Funktionen und <code>addFunction()</code> oder <code>loadFunctions()</code> Methoden:
  217. <programlisting role="php"><![CDATA[
  218. ...
  219. /**
  220. * Diese Funktion ...
  221. *
  222. * @param integer $inputParam
  223. * @return string
  224. */
  225. function function1($inputParam) {
  226. ...
  227. }
  228. /**
  229. * Diese Funktion ...
  230. *
  231. * @param integer $inputParam1
  232. * @param string $inputParam2
  233. * @return float
  234. */
  235. function function2($inputParam1, $inputParam2) {
  236. ...
  237. }
  238. ...
  239. $server = new Zend_Soap_Server(null, $options);
  240. $server->addFunction('function1');
  241. $server->addFunction('function2');
  242. ...
  243. $server->handle();
  244. ]]>
  245. </programlisting>
  246. </para>
  247. </sect2>
  248. <sect2 id="zend.soap.server.request_response">
  249. <title>Anfragen und Antwort Objekte behandeln.</title>
  250. <note>
  251. <title>Fortgeschritten</title>
  252. <para>
  253. Dieser Abschnitt beschreibt das fortgeschrittene bearbeiten von Anfrage-/Antwort-Optionen
  254. und kann übersprungen werden.
  255. </para>
  256. </note>
  257. <para>
  258. Die Zend_Soap_Server Komponente führt Anfrage/Antwort-Bearbeitung automatisch durch. Sie
  259. erlaubt es aber diese zu fangen und Vor- und Nach-bearbeitungen durchzuführen.
  260. </para>
  261. <sect3 id="zend.soap.server.request_response.request">
  262. <title>Anfrage Bearbeitung.</title>
  263. <para>
  264. Die <classname>Zend_Soap_Server::handle()</classname> Methode nimmt Anfragen vom Standard-Eingabe Stream
  265. ('php://input') entgegen. Sie kann übergangen werden durch die Angabe von optionalen Parametern
  266. an die <code>handle()</code> Methode oder durch setzen einer Anfrage durch Verwendung der
  267. <code>setRequest()</code> Methode:
  268. <programlisting role="php"><![CDATA[
  269. ...
  270. $server = new Zend_Soap_Server(...);
  271. ...
  272. // Eine Anfrage setzen durch Verwendung des optionalen $request Parameters
  273. $server->handle($request);
  274. ...
  275. // Eine Anfrage setzen durch Verwendung der setRequest() Methode
  276. $server->setRequest();
  277. $server->handle();
  278. ]]>
  279. </programlisting>
  280. </para>
  281. <para>
  282. Anfrage Objekte können dargestellt werden durch Verwendung der folgenden Dinge:
  283. <itemizedlist>
  284. <listitem>
  285. <para>
  286. DOMDocument (gecastet zu XML)
  287. </para>
  288. </listitem>
  289. <listitem>
  290. <para>
  291. DOMNode (Besitzer Dokument wird genommen und zu XML gecastet)
  292. </para>
  293. </listitem>
  294. <listitem>
  295. <para>
  296. SimpleXMLElement (gecasted zu XML)
  297. </para>
  298. </listitem>
  299. <listitem>
  300. <para>
  301. stdClass (__toString() wird aufgerufen und geprüft ob es gültiges XML ist)
  302. </para>
  303. </listitem>
  304. <listitem>
  305. <para>
  306. string (geprüft ob es gültiges XML ist)
  307. </para>
  308. </listitem>
  309. </itemizedlist>
  310. </para>
  311. <para>
  312. Die zuletzt bearbeitete Anfrage kann durch Verwendung der <code>getLastRequest()</code>
  313. Methode als XML String empfangen werden:
  314. <programlisting role="php"><![CDATA[
  315. ...
  316. $server = new Zend_Soap_Server(...);
  317. ...
  318. $server->handle();
  319. $request = $server->getLastRequest();
  320. ]]>
  321. </programlisting>
  322. </para>
  323. </sect3>
  324. <sect3 id="zend.soap.server.request_response.response">
  325. <title>Antworten vor-bearbeiten.</title>
  326. <para>
  327. Die <classname>Zend_Soap_Server::handle()</classname> Methode wirft die erzeugte Antwort automatisch
  328. auf den Ausgabe Stream aus. Das kann durch Verwendung von <code>setReturnResponse()</code>
  329. mit <code>true</code> oder <code>false</code> als Parameter blockiert werden
  330. <footnote>
  331. <para>
  332. Der aktuelle Status des Rückgabe Antwort Flags kann mit der
  333. <code>setReturnResponse()</code> Methode abgefragt werden.
  334. </para>
  335. </footnote>.
  336. Die erzeugte Antwort wird in diesem Fall durch die <code>handle()</code> Methode zurückgegeben.
  337. <programlisting role="php"><![CDATA[
  338. ...
  339. $server = new Zend_Soap_Server(...);
  340. ...
  341. // Eine Antwort als Rückgabewert der handle() Methode
  342. // erhalten statt diese auf den Ausgabe Stream zu werfen
  343. $server->setReturnResponse(true);
  344. ...
  345. $response = $server->handle();
  346. ...
  347. ]]>
  348. </programlisting>
  349. </para>
  350. <para>
  351. Die letzte Antwort kann auch mit der <code>getLastResponse()</code> Methode empfangen werden
  352. um Vor-Bearbeitungen durchzuführen:
  353. <programlisting role="php"><![CDATA[
  354. ...
  355. $server = new Zend_Soap_Server(...);
  356. ...
  357. $server->handle();
  358. $response = $server->getLastResponse();
  359. ...
  360. ]]>
  361. </programlisting>
  362. </para>
  363. </sect3>
  364. </sect2>
  365. </sect1>