Zend_Soap_Server.xml 15 KB

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