Zend_Rest_Client.xml 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.rest.client">
  5. <title>Zend_Rest_Client</title>
  6. <sect2 id="zend.rest.client.introduction">
  7. <title>Introduction</title>
  8. <para>
  9. Utiliser le <classname>Zend_Rest_Client</classname> est très semblable à
  10. l'utilisation des objets de <code>SoapClient</code> (<ulink
  11. url="http://www.php.net/soap">SOAP web service extension</ulink>). Vous pouvez
  12. simplement appeler les procédures de service de REST comme méthodes de
  13. <classname>Zend_Rest_Client</classname>. Vous devez indiquer l'adresse complète du
  14. service dans le constructeur de <classname>Zend_Rest_Client</classname>.
  15. </para>
  16. <example id="zend.rest.client.introduction.example-1">
  17. <title>Une requête REST basique</title>
  18. <programlisting language="php"><![CDATA[
  19. /**
  20. * Connexion au serveur framework.zend.com server
  21. */
  22. require_once 'Zend/Rest/Client.php';
  23. $client = new Zend_Rest_Client('http://framework.zend.com/rest');
  24. echo $client->sayHello('Davey', 'Day')->get();
  25. // "Hello Davey, Good Day"
  26. ]]></programlisting>
  27. </example>
  28. <note>
  29. <title>Différences dans les appels</title>
  30. <para>
  31. <classname>Zend_Rest_Client</classname> tente de rendre les méthodes distantes
  32. de la même manière que ses propres méthodes, la seule différence étant que vous
  33. devez suivre l'appel de méthode <methodname>get()</methodname>, <methodname>post()</methodname>,
  34. <methodname>put()</methodname> ou <methodname>delete()</methodname>. Cet appel peut être fait par
  35. l'intermédiaire de méthodes enchaînées ou dans des appels séparés de méthode
  36. :
  37. </para>
  38. <programlisting language="php"><![CDATA[
  39. $client->sayHello('Davey', 'Day');
  40. echo $client->get();
  41. ]]></programlisting>
  42. </note>
  43. </sect2>
  44. <sect2 id="zend.rest.client.return">
  45. <title>Réponses</title>
  46. <para>
  47. Toutes les demandes faites en utilisant <classname>Zend_Rest_Client</classname>
  48. retourne un objet <classname>Zend_Rest_Client_Response</classname>. Cet objet a beaucoup
  49. de propriétés qui facilitent l'accès aux résultats.
  50. </para>
  51. <para>
  52. Quand le service est basé sur <classname>Zend_Rest_Server</classname>,
  53. Zend_Rest_Client peut faire plusieurs suppositions au sujet de la réponse, y compris le
  54. statut de réponse (succès ou échec) et le type de retour.
  55. </para>
  56. <example id="zend.rest.client.return.example-1">
  57. <title>État de la réponse</title>
  58. <programlisting language="php"><![CDATA[
  59. $result = $client->sayHello('Davey', 'Day')->get();
  60. if ($result->isSuccess()) {
  61. echo $result; // "Hello Davey, Good Day"
  62. }
  63. ]]></programlisting>
  64. </example>
  65. <para>
  66. Dans l'exemple ci-dessus, vous pouvez voir que nous utilisons le résultat de la
  67. demande comme un objet, pour appeler <methodname>isSuccess()</methodname>, et puis grâce à
  68. <methodname>__toString()</methodname>, nous pouvons simplement faire <code>echo</code> sur l'objet
  69. pour récupérer le résultat. <classname>Zend_Rest_Client_Response</classname> vous
  70. permettra de afficher n'importe quelle valeur scalaire. Pour les types complexes, vous
  71. pouvez employer la notation type objet ou type tableau.
  72. </para>
  73. <para>
  74. Si cependant, vous souhaitez questionner un service n'employant pas
  75. <classname>Zend_Rest_Server</classname> l'objet de
  76. <classname>Zend_Rest_Client_Response</classname> se comportera comme un
  77. <code>SimpleXMLElement</code>. Cependant, pour faciliter les choses, il questionnera
  78. automatiquement le <acronym>XML</acronym> en utilisant XPath si la propriété n'est pas un descendant direct
  79. de l'élément racine du document. En plus, si vous accédez à une propriété comme à une
  80. méthode, vous recevrez la valeur de <acronym>PHP</acronym> pour l'objet, ou un tableau de résultats.
  81. </para>
  82. <example id="zend.rest.client.return.example-2">
  83. <title>Utiliser le service REST Technorati</title>
  84. <programlisting language="php"><![CDATA[
  85. $technorati = new Zend_Rest_Client('http://api.technorati.com/bloginfo');
  86. $technorati->key($key);
  87. $technorati->url('http://pixelated-dreams.com');
  88. $result = $technorati->get();
  89. echo $result->firstname() .' '. $result->lastname();
  90. ]]></programlisting>
  91. </example>
  92. <example id="zend.rest.client.return.example-3">
  93. <title>Exemple de réponse Technorati</title>
  94. <programlisting language="xml"><![CDATA[
  95. <?xml version="1.0" encoding="utf-8"?>
  96. <!-- generator="Technorati API version 1.0 /bloginfo" -->
  97. <!DOCTYPE tapi PUBLIC "-//Technorati, Inc.//DTD TAPI 0.02//EN"
  98. "http://api.technorati.com/dtd/tapi-002.xml">
  99. <tapi version="1.0">
  100. <document>
  101. <result>
  102. <url>http://pixelated-dreams.com</url>
  103. <weblog>
  104. <name>Pixelated Dreams</name>
  105. <url>http://pixelated-dreams.com</url>
  106. <author>
  107. <username>DShafik</username>
  108. <firstname>Davey</firstname>
  109. <lastname>Shafik</lastname>
  110. </author>
  111. <rssurl>http://pixelated-dreams.com/feeds/index.rss2</rssurl>
  112. <atomurl>http://pixelated-dreams.com/feeds/atom.xml</atomurl>
  113. <inboundblogs>44</inboundblogs>
  114. <inboundlinks>218</inboundlinks>
  115. <lastupdate>2006-04-26 04:36:36 GMT</lastupdate>
  116. <rank>60635</rank>
  117. </weblog>
  118. <inboundblogs>44</inboundblogs>
  119. <inboundlinks>218</inboundlinks>
  120. </result>
  121. </document>
  122. </tapi>
  123. ]]></programlisting>
  124. </example>
  125. <para>
  126. Ici nous accédons aux propriétés <code>firstname</code> et
  127. <code>lastname</code>.Bien que ce ne soient pas les éléments supérieurs, elles sont
  128. automatiquement retournées quand on accède par le nom.
  129. </para>
  130. <note>
  131. <title>Éléments multiples</title>
  132. <para>
  133. Si des éléments multiples sont trouvés en accédant à une valeur de nom, un
  134. tableau d'élément SimpleXMLElement sera retourné ; l'accès par l'intermédiaire de la
  135. notation de méthode retournera un tableau de valeurs.
  136. </para>
  137. </note>
  138. </sect2>
  139. <sect2 id="zend.rest.client.args">
  140. <title>Arguments de requêtes</title>
  141. <para>
  142. A moins que vous ne fassiez une demande à un service basé sur
  143. <classname>Zend_Rest_Server</classname>, il y a des chances que vous devez envoyer des
  144. arguments multiples avec votre requête. Ceci est fait en appelant une méthode avec le
  145. nom de l'argument, en passant la valeur comme premier (et seul) argument. Chacun de ces
  146. appels de méthode renvoie l'objet lui-même, tenant compte de l'enchaînement, ou de
  147. l'utilisation habituelle. Le premier appel, ou le premier argument si vous passez plus
  148. d'un argument, est toujours considéré comme la méthode en appelant un service
  149. <classname>Zend_Rest_Server</classname>.
  150. </para>
  151. <example id="zend.rest.client.args.example-1">
  152. <title>Affecter des arguments de requêtes</title>
  153. <programlisting language="php"><![CDATA[
  154. $client = new Zend_Rest_Client('http://example.org/rest');
  155. $client->arg('value1');
  156. $client->arg2('value2');
  157. $client->get();
  158. // or
  159. $client->arg('value1')->arg2('value2')->get();
  160. ]]></programlisting>
  161. </example>
  162. <para>
  163. Les deux méthodes dans l'exemple ci-dessus, auront comme conséquence l'obtention
  164. des arguments suivants :
  165. <code>?method=arg&amp;arg1=value1&amp;arg=value1&amp;arg2=value2</code>
  166. </para>
  167. <para>
  168. Vous noterez que le premier appel de <code>$client-&gt;arg('value1');</code> a eu
  169. comme conséquence <code>method=arg&amp;arg1=value1</code> et <code>arg=value1</code> ;
  170. ceci afin que <classname>Zend_Rest_Server</classname> puisse comprendre la demande
  171. correctement, plutôt que d'exiger la connaissance préalable du service.
  172. </para>
  173. <warning>
  174. <title>Sévérité de Zend_Rest_Client</title>
  175. <para>
  176. Tout service REST qui est strict au sujet des arguments qu'il reçoit échouera
  177. probablement en utilisant <classname>Zend_Rest_Client</classname>, en raison du
  178. comportement décrit ci-dessus. Ce n'est pas une pratique courante et ne devrait pas
  179. poser des problèmes.
  180. </para>
  181. </warning>
  182. </sect2>
  183. </sect1>