Zend_Rest_Client.xml 8.2 KB

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