Zend_Soap_Server.xml 12 KB

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