Zend_Soap_Server.xml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 17172 -->
  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 <classname>Zend_Soap_Server</classname> Komponente im WSDL Modus arbeitet,
  16. verwendet Sie ein bereits vorbereitetes WSDL Dokument um das Verhalten des Server Objekts
  17. und die Optionen des 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. <varname>$wsdl</varname>, 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. <varname>$options</varname> - Optionen für die Erstellung eines SOAP
  56. Server 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 (<varname>$options</varname>) ist ein Array
  119. mit 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 <classname>Zend_Soap_Server</classname> Komponente führt Anfrage/Antwort-Bearbeitung
  262. automatisch durch. Sie erlaubt es aber diese zu fangen und Vor- und Nach-bearbeitungen
  263. durchzuführen.
  264. </para>
  265. <sect3 id="zend.soap.server.request_response.request">
  266. <title>Anfrage Bearbeitung</title>
  267. <para>
  268. Die <methodname>Zend_Soap_Server::handle()</methodname> Methode nimmt Anfragen vom
  269. Standard-Eingabe Stream ('php://input') entgegen. Sie kann übergangen werden durch
  270. die Angabe von optionalen Parametern an die <methodname>handle()</methodname>
  271. Methode oder durch setzen einer Anfrage durch Verwendung der
  272. <methodname>setRequest()</methodname> Methode:
  273. <programlisting language="php"><![CDATA[
  274. ...
  275. $server = new Zend_Soap_Server(...);
  276. ...
  277. // Eine Anfrage setzen durch Verwendung des optionalen $request Parameters
  278. $server->handle($request);
  279. ...
  280. // Eine Anfrage setzen durch Verwendung der setRequest() Methode
  281. $server->setRequest();
  282. $server->handle();
  283. ]]></programlisting>
  284. </para>
  285. <para>
  286. Anfrage Objekte können dargestellt werden durch Verwendung der folgenden Dinge:
  287. <itemizedlist>
  288. <listitem>
  289. <para>
  290. DOMDocument (gecastet zu XML)
  291. </para>
  292. </listitem>
  293. <listitem>
  294. <para>
  295. DOMNode (Besitzer Dokument wird genommen und zu XML gecastet)
  296. </para>
  297. </listitem>
  298. <listitem>
  299. <para>
  300. SimpleXMLElement (gecasted zu XML)
  301. </para>
  302. </listitem>
  303. <listitem>
  304. <para>
  305. stdClass (__toString() wird aufgerufen und geprüft ob es gültiges XML
  306. ist)
  307. </para>
  308. </listitem>
  309. <listitem>
  310. <para>
  311. string (geprüft ob es gültiges XML ist)
  312. </para>
  313. </listitem>
  314. </itemizedlist>
  315. </para>
  316. <para>
  317. Die zuletzt bearbeitete Anfrage kann durch Verwendung der
  318. <methodname>getLastRequest()</methodname> Methode als XML String empfangen werden:
  319. <programlisting language="php"><![CDATA[
  320. ...
  321. $server = new Zend_Soap_Server(...);
  322. ...
  323. $server->handle();
  324. $request = $server->getLastRequest();
  325. ]]></programlisting>
  326. </para>
  327. </sect3>
  328. <sect3 id="zend.soap.server.request_response.response">
  329. <title>Antworten vor-bearbeiten</title>
  330. <para>
  331. Die <methodname>Zend_Soap_Server::handle()</methodname> Methode wirft die erzeugte
  332. Antwort automatisch auf den Ausgabe Stream aus. Das kann durch Verwendung von
  333. <methodname>setReturnResponse()</methodname> mit <constant>TRUE</constant> oder
  334. <constant>FALSE</constant> als Parameter blockiert werden
  335. <footnote>
  336. <para>
  337. Der aktuelle Status des Rückgabe Antwort Flags kann mit der
  338. <methodname>setReturnResponse()</methodname> Methode abgefragt werden.
  339. </para>
  340. </footnote>.
  341. Die erzeugte Antwort wird in diesem Fall durch die <methodname>handle()</methodname>
  342. Methode zurückgegeben.
  343. <programlisting language="php"><![CDATA[
  344. ...
  345. $server = new Zend_Soap_Server(...);
  346. ...
  347. // Eine Antwort als Rückgabewert der handle() Methode
  348. // erhalten statt diese auf den Ausgabe Stream zu werfen
  349. $server->setReturnResponse(true);
  350. ...
  351. $response = $server->handle();
  352. ...
  353. ]]></programlisting>
  354. </para>
  355. <para>
  356. Die letzte Antwort kann auch mit der <methodname>getLastResponse()</methodname>
  357. Methode empfangen werden um Vor-Bearbeitungen durchzuführen:
  358. <programlisting language="php"><![CDATA[
  359. ...
  360. $server = new Zend_Soap_Server(...);
  361. ...
  362. $server->handle();
  363. $response = $server->getLastResponse();
  364. ...
  365. ]]></programlisting>
  366. </para>
  367. </sect3>
  368. </sect2>
  369. </sect1>