Zend_Soap_Server.xml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.soap.server">
  5. <title>Zend_Soap_Server</title>
  6. <para>
  7. La classe <classname>Zend_Soap_Server</classname> a été créée pour simplifier la
  8. création d'un service Web <acronym>SOAP</acronym> en <acronym>PHP</acronym>.
  9. </para>
  10. <para>
  11. Elle peut être utilisée en mode WSDL ou non-WSDL, et elle utilise des fonctions ou des
  12. classes pour définir le service Web rendu.
  13. </para>
  14. <para>
  15. Lorsque le composant <classname>Zend_Soap_Server</classname> fonctionne en mode WSDL,
  16. il utilise le document WSDL pour décrire le comportement des objets du serveur ainsi que les
  17. options de transport vers les clients.
  18. </para>
  19. <para>
  20. Un document WSDL peut être auto-généré en utilisant <link
  21. linkend="zend.soap.autodiscovery.introduction">le composant Zend_Soap_AutoDiscovery</link>,
  22. ou alors construit manuellement avec <link linkend="zend.soap.wsdl">la classe
  23. <classname>Zend_Soap_Wsdl</classname></link> ou tout autre outil de génération de <acronym>XML</acronym>
  24. </para>
  25. <para>
  26. Si le mode non-WSDL est utilisé, alors toutes les options du protocole doivent être
  27. configurées.
  28. </para>
  29. <sect2 id="zend.soap.server.constructor">
  30. <title>Constructeur de <classname>Zend_Soap_Server</classname></title>
  31. <para>
  32. Le constructeur de <classname>Zend_Soap_Server</classname> s'utilise différemment
  33. selon que l'on fonctionne en mode WSDL ou non.
  34. </para>
  35. <sect3 id="zend.soap.server.constructor.wsdl_mode">
  36. <title>Constructeur de <classname>Zend_Soap_Server</classname> en mode WSDL</title>
  37. <para>
  38. Le constructeur de <classname>Zend_Soap_Server</classname> prend 2 paramètres
  39. optionnel en mode WSDL: <orderedlist>
  40. <listitem>
  41. <para>
  42. <varname>$wsdl</varname>, l'URI permettant l'accès au fichier WSDL
  43. <footnote>
  44. <para>
  45. Peut être spécifié plus tard avec la méthode
  46. <methodname>setWsdl($wsdl)</methodname>
  47. </para>
  48. </footnote>.
  49. </para>
  50. </listitem>
  51. <listitem>
  52. <para>
  53. <varname>$options</varname> - options de création des objets serveurs
  54. <footnote>
  55. <para>
  56. Peut être spécifié plus tard avec la méthode
  57. <methodname>setOptions($options)</methodname>
  58. </para>
  59. </footnote>.
  60. </para>
  61. <para>
  62. Les options suivantes sont reconnues en mode WSDL : <itemizedlist>
  63. <listitem>
  64. <para>
  65. "soap_version" ("soapVersion") : version du protocole <acronym>SOAP</acronym>
  66. à utiliser (SOAP_1_1 ou <acronym>SOAP</acronym>_1_2).
  67. </para>
  68. </listitem>
  69. <listitem>
  70. <para>"actor" : l'URI du serveur <acronym>SOAP</acronym>.</para>
  71. </listitem>
  72. <listitem>
  73. <para>
  74. "classmap" ("classMap") : utilisé pour faire correspondre
  75. des types WSDL à des classes <acronym>PHP</acronym>.
  76. </para>
  77. <para>
  78. L'option doit être un tableau avec pour clés les types
  79. WSDL et pour valeur les classes <acronym>PHP</acronym> correspondantes.
  80. </para>
  81. </listitem>
  82. <listitem>
  83. <para>
  84. "encoding" : encodage interne des caractères (l'encodage
  85. externe est toujours UTF-8).
  86. </para>
  87. </listitem>
  88. <listitem>
  89. <para>
  90. "wsdl" : équivalent à un appel à
  91. <methodname>setWsdl($wsdlValue)</methodname>
  92. </para>
  93. </listitem>
  94. </itemizedlist>
  95. </para>
  96. </listitem>
  97. </orderedlist>
  98. </para>
  99. </sect3>
  100. <sect3 id="zend.soap.server.wsdl_mode">
  101. <title>Constructeur de <classname>Zend_Soap_Server</classname> en mode
  102. non-WSDL</title>
  103. <para>
  104. Le premier paramètre du constructeur <emphasis>doit</emphasis> être mis à la
  105. valeur <constant>NULL</constant> si vous voulez utiliser
  106. <classname>Zend_Soap_Server</classname> en mode non-WSDL.
  107. </para>
  108. <para>Vous devez aussi spécifier "uri" dans ce cas (voir juste après).</para>
  109. <para>
  110. Le second paramètre de constructeur est un tableau (<varname>$options</varname>)
  111. d'options permettant la création de l'objet serveur <acronym>SOAP</acronym>.<footnote>
  112. <para>
  113. Les options se configurent aussi plus tard, grâce à la méthode
  114. <methodname>setOptions($options)</methodname>
  115. </para>
  116. </footnote>.
  117. </para>
  118. <para>
  119. Les options suivantes sont reconnues en mode non-WSDL : <itemizedlist>
  120. <listitem>
  121. <para>
  122. "soap_version" ("soapVersion") : version <acronym>SOAP</acronym> à utiliser (SOAP_1_1
  123. ou <acronym>SOAP</acronym>_1_2).
  124. </para>
  125. </listitem>
  126. <listitem>
  127. <para>"actor" : l'URI du serveur <acronym>SOAP</acronym>.</para>
  128. </listitem>
  129. <listitem>
  130. <para>
  131. "classmap" ("classMap") : utilisé pour faire correspondre des
  132. types WSDL à des classes <acronym>PHP</acronym>.
  133. </para>
  134. <para>
  135. L'option doit être un tableau avec pour clés les types WSDL et
  136. pour valeur les classes <acronym>PHP</acronym> correspondantes.
  137. </para>
  138. </listitem>
  139. <listitem>
  140. <para>
  141. "encoding" : encodage interne des caractères (l'encodage externe
  142. est toujours UTF-8).
  143. </para>
  144. </listitem>
  145. <listitem>
  146. <para>
  147. "wsdl" : équivalent à un appel à
  148. <code>setWsdl($wsdlValue).</code>
  149. </para>
  150. </listitem>
  151. </itemizedlist>
  152. </para>
  153. </sect3>
  154. </sect2>
  155. <sect2 id="zend.soap.server.api_define_methods">
  156. <title>Méthodes de définitions de l'API du service</title>
  157. <para>Il existe 2 manières de déclarer l'API de votre serveur <acronym>SOAP</acronym>.</para>
  158. <para>
  159. La première consiste à attacher des classes à l'objet
  160. <classname>Zend_Soap_Server</classname>, celles-ci devront alors décrire l'API du
  161. service en totalité : <programlisting language="php"><![CDATA[
  162. ...
  163. class MyClass {
  164. /**
  165. * Cette méthode accepte ...
  166. *
  167. * @param integer $inputParam
  168. * @return string
  169. */
  170. public function method1($inputParam) {
  171. ...
  172. }
  173. /**
  174. * Cette méthode accepte ...
  175. *
  176. * @param integer $inputParam1
  177. * @param string $inputParam2
  178. * @return float
  179. */
  180. public function method2($inputParam1, $inputParam2) {
  181. ...
  182. }
  183. ...
  184. }
  185. ...
  186. $server = new Zend_Soap_Server(null, $options);
  187. // Connecte la classe au serveur Soap
  188. $server->setClass('MyClass');
  189. // Connecte un objet déjà initialisé au serveur Soap
  190. $server->setObject(new MyClass());
  191. ...
  192. $server->handle();
  193. ]]></programlisting> <note>
  194. <title>Important!</title>
  195. <para>
  196. Vous devriez complètement décrire chaque méthode grâce aux blocs de
  197. commentaires PHPDoc dans le cas où vous souhaitez utiliser l'auto découverte du
  198. service pour préparer le WSDL correspondant.
  199. </para>
  200. </note>
  201. </para>
  202. <para>
  203. La seconde manière de décrire l'API de votre service Web est d'utiliser des
  204. fonctions PHP conjointement avec les méthodes <methodname>addFunction()</methodname> ou
  205. <methodname>loadFunctions()</methodname> :<programlisting language="php"><![CDATA[
  206. ...
  207. /**
  208. * Cette fonction ...
  209. *
  210. * @param integer $inputParam
  211. * @return string
  212. */
  213. function function1($inputParam) {
  214. ...
  215. }
  216. /**
  217. * Cette fonction ...
  218. *
  219. * @param integer $inputParam1
  220. * @param string $inputParam2
  221. * @return float
  222. */
  223. function function2($inputParam1, $inputParam2) {
  224. ...
  225. }
  226. ...
  227. $server = new Zend_Soap_Server(null, $options);
  228. $server->addFunction('function1');
  229. $server->addFunction('function2');
  230. ...
  231. $server->handle();
  232. ]]></programlisting></para>
  233. </sect2>
  234. <sect2 id="zend.soap.server.request_response">
  235. <title>Gestion des objets de requête et de réponse</title>
  236. <note>
  237. <title>Avancée</title>
  238. <para>
  239. Cette section décrit la gestion avancée des requêtes et réponses <acronym>SOAP</acronym> et
  240. pourra être évitée.
  241. </para>
  242. </note>
  243. <para>
  244. Le composant Zend_Soap_Server effectue des requêtes et récupère des réponses, ceci
  245. automatiquement. Il est possible d'intercepter la requête/réponse pour ajouter du pré ou
  246. post processus.
  247. </para>
  248. <sect3 id="zend.soap.server.request_response.request">
  249. <title>Requête</title>
  250. <para>
  251. La méthode <methodname>Zend_Soap_Server::handle()</methodname> utilise la
  252. requête depuis le flux d'entrée standard ('php://input'). Le comportement peut être
  253. changé en passant des paramètres à la méthode <methodname>handle()</methodname> ou en spécifiant
  254. sa propre requête grâce à la méthode <methodname>setRequest()</methodname> :<programlisting
  255. role="php"><![CDATA[
  256. ...
  257. $server = new Zend_Soap_Server(...);
  258. ...
  259. // Affecte une requête personnalisée
  260. $server->handle($request);
  261. ...
  262. // Affecte une requête personnalisée
  263. $server->setRequest();
  264. $server->handle();
  265. ]]></programlisting></para>
  266. <para>
  267. Un objet de requête peut être représenté de plusieurs manières différentes
  268. :<itemizedlist>
  269. <listitem>
  270. <para>DOMDocument (casté en <acronym>XML</acronym>)</para>
  271. </listitem>
  272. <listitem>
  273. <para>
  274. DOMNode (le DOMDocument attaché est extrait et casté en
  275. <acronym>XML</acronym>)
  276. </para>
  277. </listitem>
  278. <listitem>
  279. <para>SimpleXMLElement (casté en <acronym>XML</acronym>)</para>
  280. </listitem>
  281. <listitem>
  282. <para>
  283. stdClass (__toString() est appelée et son contenu est vérifié
  284. comme <acronym>XML</acronym> valide)
  285. </para>
  286. </listitem>
  287. <listitem>
  288. <para>chaînes de caractères (vérifiée comme <acronym>XML</acronym> valide)</para>
  289. </listitem>
  290. </itemizedlist>
  291. </para>
  292. <para>
  293. La dernière requête utilisée et traitée peut être récupérée en utilisant la
  294. méthode <methodname>getLastRequest()</methodname> :<programlisting language="php"><![CDATA[
  295. ...
  296. $server = new Zend_Soap_Server(...);
  297. ...
  298. $server->handle();
  299. $request = $server->getLastRequest();
  300. ]]></programlisting></para>
  301. </sect3>
  302. <sect3 id="zend.soap.server.request_response.response">
  303. <title>Réponse</title>
  304. <para>
  305. <methodname>Zend_Soap_Server::handle()</methodname> émet automatiquement la
  306. réponse vers le flux standard de sortie. Ce comportement peut être changé en
  307. utilisant <methodname>setReturnResponse()</methodname> avec une valeur <constant>TRUE</constant> ou
  308. <constant>FALSE</constant> en paramètre. <footnote>
  309. <para>
  310. L'état actuel du drapeau de retour de la réponse peut être vérifié via
  311. la méthode <methodname>setReturnResponse()</methodname> sans paramètre.
  312. </para>
  313. </footnote>. La réponse générée par <methodname>handle()</methodname> est alors retournée et
  314. non plus émise. <programlisting language="php"><![CDATA[
  315. ...
  316. $server = new Zend_Soap_Server(...);
  317. ...
  318. // Récupère la réponse plutôt que de l'émettre
  319. $server->setReturnResponse(true);
  320. ...
  321. $response = $server->handle();
  322. ...
  323. ]]></programlisting></para>
  324. <para>
  325. Autrement, la dernière réponse peut être récupérer avec la méthode
  326. <methodname>getLastResponse()</methodname> :<programlisting language="php"><![CDATA[
  327. ...
  328. $server = new Zend_Soap_Server(...);
  329. ...
  330. $server->handle();
  331. $response = $server->getLastResponse();
  332. ...
  333. ]]></programlisting></para>
  334. </sect3>
  335. </sect2>
  336. </sect1>