2
0

Zend_Soap_Server.xml 15 KB

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