| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.soap.server">
- <title>Zend_Soap_Server</title>
- <para>
- La classe <classname>Zend_Soap_Server</classname> a été créée pour simplifier la
- création d'un service Web <acronym>SOAP</acronym> en <acronym>PHP</acronym>.
- </para>
- <para>
- Elle peut être utilisée en mode WSDL ou non-WSDL, et elle utilise des fonctions ou des
- classes pour définir le service Web rendu.
- </para>
- <para>
- Lorsque le composant <classname>Zend_Soap_Server</classname> fonctionne en mode WSDL,
- il utilise le document WSDL pour décrire le comportement des objets du serveur ainsi que les
- options de transport vers les clients.
- </para>
- <para>
- Un document WSDL peut être auto-généré en utilisant <link
- linkend="zend.soap.autodiscovery.introduction">le composant Zend_Soap_AutoDiscovery</link>,
- ou alors construit manuellement avec <link linkend="zend.soap.wsdl">la classe
- <classname>Zend_Soap_Wsdl</classname></link> ou tout autre outil de génération de <acronym>XML</acronym>
- </para>
- <para>
- Si le mode non-WSDL est utilisé, alors toutes les options du protocole doivent être
- configurées.
- </para>
- <sect2 id="zend.soap.server.constructor">
- <title>Constructeur de <classname>Zend_Soap_Server</classname></title>
- <para>
- Le constructeur de <classname>Zend_Soap_Server</classname> s'utilise différemment
- selon que l'on fonctionne en mode WSDL ou non.
- </para>
- <sect3 id="zend.soap.server.constructor.wsdl_mode">
- <title>Constructeur de <classname>Zend_Soap_Server</classname> en mode WSDL</title>
- <para>
- Le constructeur de <classname>Zend_Soap_Server</classname> prend 2 paramètres
- optionnel en mode WSDL: <orderedlist>
- <listitem>
- <para>
- <varname>$wsdl</varname>, l'URI permettant l'accès au fichier WSDL
- <footnote>
- <para>
- Peut être spécifié plus tard avec la méthode
- <methodname>setWsdl($wsdl)</methodname>
- </para>
- </footnote>.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>$options</varname> - options de création des objets serveurs
- <footnote>
- <para>
- Peut être spécifié plus tard avec la méthode
- <methodname>setOptions($options)</methodname>
- </para>
- </footnote>.
- </para>
- <para>
- Les options suivantes sont reconnues en mode WSDL : <itemizedlist>
- <listitem>
- <para>
- "soap_version" ("soapVersion") : version du protocole <acronym>SOAP</acronym>
- à utiliser (SOAP_1_1 ou <acronym>SOAP</acronym>_1_2).
- </para>
- </listitem>
- <listitem>
- <para>"actor" : l'URI du serveur <acronym>SOAP</acronym>.</para>
- </listitem>
- <listitem>
- <para>
- "classmap" ("classMap") : utilisé pour faire correspondre
- des types WSDL à des classes <acronym>PHP</acronym>.
- </para>
- <para>
- L'option doit être un tableau avec pour clés les types
- WSDL et pour valeur les classes <acronym>PHP</acronym> correspondantes.
- </para>
- </listitem>
- <listitem>
- <para>
- "encoding" : encodage interne des caractères (l'encodage
- externe est toujours UTF-8).
- </para>
- </listitem>
- <listitem>
- <para>
- "wsdl" : équivalent à un appel à
- <methodname>setWsdl($wsdlValue)</methodname>
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </listitem>
- </orderedlist>
- </para>
- </sect3>
- <sect3 id="zend.soap.server.wsdl_mode">
- <title>Constructeur de <classname>Zend_Soap_Server</classname> en mode
- non-WSDL</title>
- <para>
- Le premier paramètre du constructeur <emphasis>doit</emphasis> être mis à la
- valeur <constant>NULL</constant> si vous voulez utiliser
- <classname>Zend_Soap_Server</classname> en mode non-WSDL.
- </para>
- <para>Vous devez aussi spécifier "uri" dans ce cas (voir juste après).</para>
- <para>
- Le second paramètre de constructeur est un tableau (<varname>$options</varname>)
- d'options permettant la création de l'objet serveur <acronym>SOAP</acronym>.<footnote>
- <para>
- Les options se configurent aussi plus tard, grâce à la méthode
- <methodname>setOptions($options)</methodname>
- </para>
- </footnote>.
- </para>
- <para>
- Les options suivantes sont reconnues en mode non-WSDL : <itemizedlist>
- <listitem>
- <para>
- "soap_version" ("soapVersion") : version <acronym>SOAP</acronym> à utiliser (SOAP_1_1
- ou <acronym>SOAP</acronym>_1_2).
- </para>
- </listitem>
- <listitem>
- <para>"actor" : l'URI du serveur <acronym>SOAP</acronym>.</para>
- </listitem>
- <listitem>
- <para>
- "classmap" ("classMap") : utilisé pour faire correspondre des
- types WSDL à des classes <acronym>PHP</acronym>.
- </para>
- <para>
- L'option doit être un tableau avec pour clés les types WSDL et
- pour valeur les classes <acronym>PHP</acronym> correspondantes.
- </para>
- </listitem>
- <listitem>
- <para>
- "encoding" : encodage interne des caractères (l'encodage externe
- est toujours UTF-8).
- </para>
- </listitem>
- <listitem>
- <para>
- "wsdl" : équivalent à un appel à
- <code>setWsdl($wsdlValue).</code>
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </sect3>
- </sect2>
- <sect2 id="zend.soap.server.api_define_methods">
- <title>Méthodes de définitions de l'API du service</title>
- <para>Il existe 2 manières de déclarer l'API de votre serveur <acronym>SOAP</acronym>.</para>
- <para>
- La première consiste à attacher des classes à l'objet
- <classname>Zend_Soap_Server</classname>, celles-ci devront alors décrire l'API du
- service en totalité : <programlisting language="php"><![CDATA[
- ...
- class MyClass {
- /**
- * Cette méthode accepte ...
- *
- * @param integer $inputParam
- * @return string
- */
- public function method1($inputParam) {
- ...
- }
- /**
- * Cette méthode accepte ...
- *
- * @param integer $inputParam1
- * @param string $inputParam2
- * @return float
- */
- public function method2($inputParam1, $inputParam2) {
- ...
- }
- ...
- }
- ...
- $server = new Zend_Soap_Server(null, $options);
- // Connecte la classe au serveur Soap
- $server->setClass('MyClass');
- // Connecte un objet déjà initialisé au serveur Soap
- $server->setObject(new MyClass());
- ...
- $server->handle();
- ]]></programlisting> <note>
- <title>Important!</title>
- <para>
- Vous devriez complètement décrire chaque méthode grâce aux blocs de
- commentaires PHPDoc dans le cas où vous souhaitez utiliser l'auto découverte du
- service pour préparer le WSDL correspondant.
- </para>
- </note>
- </para>
- <para>
- La seconde manière de décrire l'API de votre service Web est d'utiliser des
- fonctions PHP conjointement avec les méthodes <methodname>addFunction()</methodname> ou
- <methodname>loadFunctions()</methodname> :<programlisting language="php"><![CDATA[
- ...
- /**
- * Cette fonction ...
- *
- * @param integer $inputParam
- * @return string
- */
- function function1($inputParam) {
- ...
- }
- /**
- * Cette fonction ...
- *
- * @param integer $inputParam1
- * @param string $inputParam2
- * @return float
- */
- function function2($inputParam1, $inputParam2) {
- ...
- }
- ...
- $server = new Zend_Soap_Server(null, $options);
- $server->addFunction('function1');
- $server->addFunction('function2');
- ...
- $server->handle();
- ]]></programlisting></para>
- </sect2>
- <sect2 id="zend.soap.server.request_response">
- <title>Gestion des objets de requête et de réponse</title>
- <note>
- <title>Avancée</title>
- <para>
- Cette section décrit la gestion avancée des requêtes et réponses <acronym>SOAP</acronym> et
- pourra être évitée.
- </para>
- </note>
- <para>
- Le composant Zend_Soap_Server effectue des requêtes et récupère des réponses, ceci
- automatiquement. Il est possible d'intercepter la requête/réponse pour ajouter du pré ou
- post processus.
- </para>
- <sect3 id="zend.soap.server.request_response.request">
- <title>Requête</title>
- <para>
- La méthode <methodname>Zend_Soap_Server::handle()</methodname> utilise la
- requête depuis le flux d'entrée standard ('php://input'). Le comportement peut être
- changé en passant des paramètres à la méthode <methodname>handle()</methodname> ou en spécifiant
- sa propre requête grâce à la méthode <methodname>setRequest()</methodname> :<programlisting
- role="php"><![CDATA[
- ...
- $server = new Zend_Soap_Server(...);
- ...
- // Affecte une requête personnalisée
- $server->handle($request);
- ...
- // Affecte une requête personnalisée
- $server->setRequest();
- $server->handle();
- ]]></programlisting></para>
- <para>
- Un objet de requête peut être représenté de plusieurs manières différentes
- :<itemizedlist>
- <listitem>
- <para>DOMDocument (casté en <acronym>XML</acronym>)</para>
- </listitem>
- <listitem>
- <para>
- DOMNode (le DOMDocument attaché est extrait et casté en
- <acronym>XML</acronym>)
- </para>
- </listitem>
- <listitem>
- <para>SimpleXMLElement (casté en <acronym>XML</acronym>)</para>
- </listitem>
- <listitem>
- <para>
- stdClass (__toString() est appelée et son contenu est vérifié
- comme <acronym>XML</acronym> valide)
- </para>
- </listitem>
- <listitem>
- <para>chaînes de caractères (vérifiée comme <acronym>XML</acronym> valide)</para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- La dernière requête utilisée et traitée peut être récupérée en utilisant la
- méthode <methodname>getLastRequest()</methodname> :<programlisting language="php"><![CDATA[
- ...
- $server = new Zend_Soap_Server(...);
- ...
- $server->handle();
- $request = $server->getLastRequest();
- ]]></programlisting></para>
- </sect3>
- <sect3 id="zend.soap.server.request_response.response">
- <title>Réponse</title>
- <para>
- <methodname>Zend_Soap_Server::handle()</methodname> émet automatiquement la
- réponse vers le flux standard de sortie. Ce comportement peut être changé en
- utilisant <methodname>setReturnResponse()</methodname> avec une valeur <constant>TRUE</constant> ou
- <constant>FALSE</constant> en paramètre. <footnote>
- <para>
- L'état actuel du drapeau de retour de la réponse peut être vérifié via
- la méthode <methodname>setReturnResponse()</methodname> sans paramètre.
- </para>
- </footnote>. La réponse générée par <methodname>handle()</methodname> est alors retournée et
- non plus émise. <programlisting language="php"><![CDATA[
- ...
- $server = new Zend_Soap_Server(...);
- ...
- // Récupère la réponse plutôt que de l'émettre
- $server->setReturnResponse(true);
- ...
- $response = $server->handle();
- ...
- ]]></programlisting></para>
- <para>
- Autrement, la dernière réponse peut être récupérer avec la méthode
- <methodname>getLastResponse()</methodname> :<programlisting language="php"><![CDATA[
- ...
- $server = new Zend_Soap_Server(...);
- ...
- $server->handle();
- $response = $server->getLastResponse();
- ...
- ]]></programlisting></para>
- </sect3>
- </sect2>
- </sect1>
|