Zend_Soap_Server.xml 12 KB

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