Zend_Rest_Client.xml 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 17175 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.rest.client">
  5. <title>Zend_Rest_Client</title>
  6. <sect2 id="zend.rest.client.introduction">
  7. <title>Einführung</title>
  8. <para>
  9. Die Verwendung von <classname>Zend_Rest_Client</classname> ist sehr ähnlich der
  10. Verwendung von <code>SoapClient</code> Objekten (<ulink url="http://www.php.net/soap">SOAP Web Service Erweiterung</ulink>).
  11. Man kann einfach die REST Service Prozeduren als <classname>Zend_Rest_Client</classname> Methoden
  12. aufrufen. Spezifiziere die komplette Adresse des Services im Constructor von
  13. <classname>Zend_Rest_Client</classname>.
  14. </para>
  15. <example id="zend.rest.client.introduction.example-1">
  16. <title>Eine Basis REST Anfrage</title>
  17. <programlisting language="php"><![CDATA[
  18. /**
  19. * Verbinden zum framework.zend.com Server und eine Begrüßung empfangen
  20. */
  21. $client = new Zend_Rest_Client('http://framework.zend.com/rest');
  22. echo $client->sayHello('Davey', 'Day')->get(); // "Servus Davey, guten Tag"
  23. ]]></programlisting>
  24. </example>
  25. <note>
  26. <title>Unterschiede im Aufruf</title>
  27. <para>
  28. <classname>Zend_Rest_Client</classname> versucht, dass die entfernten Methoden, so
  29. weit wie möglich, wie die nativen Methoden aussehen, wobei der einzige Unterschied
  30. darin besteht, dass der Methodenaufruf mit <methodname>get()</methodname>,
  31. <methodname>post()</methodname>, <methodname>put()</methodname> oder
  32. <methodname>delete()</methodname> erfolgen muß. Dieser Aufruf kann entweder über
  33. Methoden Verkettung oder in eigenen Methodenaufrufen erfolgen:
  34. </para>
  35. <programlisting language="php"><![CDATA[
  36. $client->sayHello('Davey', 'Tag');
  37. echo $client->get();
  38. ]]></programlisting>
  39. </note>
  40. </sect2>
  41. <sect2 id="zend.rest.client.return">
  42. <title>Antworten</title>
  43. <para>
  44. Alle Anfragen die über <classname>Zend_Rest_Client</classname> gemacht wurden,
  45. liefern ein <classname>Zend_Rest_Client_Response</classname> Objekt zurück. Dieses
  46. Objekt hat viele Eigenschaften, was es einfacher macht, auf die Ergebnisse zuzugreifen.
  47. </para>
  48. <para>
  49. Wenn ein Service auf <classname>Zend_Rest_Server</classname> basiert, kann
  50. <classname>Zend_Rest_Client</classname> einige Annahmen über die Antwort treffen,
  51. inklusive dem Antwort Status (erfolgreich oder fehlerhaft) und den Rückgabetyp.
  52. </para>
  53. <example id="zend.rest.client.return.example-1">
  54. <title>Antwort Status</title>
  55. <programlisting language="php"><![CDATA[
  56. $result = $client->sayHello('Davey', 'Tag')->get();
  57. if ($result->isSuccess()) {
  58. echo $result; // "Hallo Davey, guten Tag"
  59. }
  60. ]]></programlisting>
  61. </example>
  62. <para>
  63. Im obigen Beispiel kann man sehen, dass das Ergebnis der Anfrage als Objekt verwendet wird,
  64. um <methodname>isSuccess()</methodname> aufzurufen. Mithilfe der magischen
  65. <methodname>__toString()</methodname>-Methode kann man das Objekt bzw. das Ergebnis ausgeben
  66. (<code>echo</code>). <classname>Zend_Rest_Client_Response</classname> erlaubt die
  67. Ausgabe jedes skalaren Wertes. Für komplexe Typen, kann entweder die Array- oder die
  68. Objektschreibweise verwendet werden.
  69. </para>
  70. <para>
  71. Wenn trotzdem ein Service abgefragt wird, der nicht <classname>Zend_Rest_Server</classname>
  72. verwendet, wird sich das <classname>Zend_Rest_Client_Response</classname> Objekt mehr wie
  73. ein <code>SimpleXMLElement</code> verhalten. Um die Dinge trotzdem einfacher zu gestalten,
  74. wird das <acronym>XML</acronym> automatisch abgefragt, indem XPath verwendet wird, wenn
  75. die Eigenschaft nicht von direkter Abstammung des Dokument Root-Elements ist.
  76. Zusätzlich, wenn auf eine Eigenschaft als Methode zugegriffen wird, empfängt man den
  77. <acronym>PHP</acronym> Wert für das Objekt, oder ein Array mit den
  78. <acronym>PHP</acronym> Wert Ergebnissen.
  79. </para>
  80. <example id="zend.rest.client.return.example-2">
  81. <title>Technorati's REST Service verwenden</title>
  82. <programlisting language="php"><![CDATA[
  83. $technorati = new Zend_Rest_Client('http://api.technorati.com/bloginfo');
  84. $technorati->key($key);
  85. $technorati->url('http://pixelated-dreams.com');
  86. $result = $technorati->get();
  87. echo $result->firstname() .' '. $result->lastname();
  88. ]]></programlisting>
  89. </example>
  90. <example id="zend.rest.client.return.example-3">
  91. <title>Beispiel Technorati Antwort</title>
  92. <programlisting language="xml"><![CDATA[
  93. <?xml version="1.0" encoding="utf-8"?>
  94. <!-- generator="Technorati API version 1.0 /bloginfo" -->
  95. <!DOCTYPE tapi PUBLIC "-//Technorati, Inc.//DTD TAPI 0.02//EN"
  96. "http://api.technorati.com/dtd/tapi-002.xml">
  97. <tapi version="1.0">
  98. <document>
  99. <result>
  100. <url>http://pixelated-dreams.com</url>
  101. <weblog>
  102. <name>Pixelated Dreams</name>
  103. <url>http://pixelated-dreams.com</url>
  104. <author>
  105. <username>DShafik</username>
  106. <firstname>Davey</firstname>
  107. <lastname>Shafik</lastname>
  108. </author>
  109. <rssurl>
  110. http://pixelated-dreams.com/feeds/index.rss2
  111. </rssurl>
  112. <atomurl>
  113. http://pixelated-dreams.com/feeds/atom.xml
  114. </atomurl>
  115. <inboundblogs>44</inboundblogs>
  116. <inboundlinks>218</inboundlinks>
  117. <lastupdate>2006-04-26 04:36:36 GMT</lastupdate>
  118. <rank>60635</rank>
  119. </weblog>
  120. <inboundblogs>44</inboundblogs>
  121. <inboundlinks>218</inboundlinks>
  122. </result>
  123. </document>
  124. </tapi>
  125. ]]></programlisting>
  126. </example>
  127. <para>
  128. Hier greifen wir auf die <code>firstname</code> und <code>lastname</code> Eigenschaften
  129. zu. Selbst wenn diese keine Top-Level Elemente sind, werden Sie automatisch
  130. zurückgegeben, wenn auf sie durch ihren Namen zugegriffen wird.
  131. </para>
  132. <note>
  133. <title>Mehrere Elemente</title>
  134. <para>
  135. Wenn beim Zugriff, über einen Namen, mehrere Elemente mit demselben Namen gefunden werden,
  136. wird ein Array von SimpleXML-Elementen zurückgegeben. Beim Zugriff über die
  137. Methodenschreibweise wird ein Array von <acronym>PHP</acronym> Werten zurückgegeben.
  138. </para>
  139. </note>
  140. </sect2>
  141. <sect2 id="zend.rest.client.args">
  142. <title>Anfrage Argumente</title>
  143. <para>
  144. Wenn man eine Anfrage an einen Server sendet, welcher nicht auf <classname>Zend_Rest_Server</classname>
  145. basiert, sind die Chancen groß, dass man mehrere Argumente mit der Anfrage senden muß. Das
  146. wird durchgeführt, indem man eine Methode mit dem Namen des Arguments aufruft und den Wert, als das
  147. erste (und einzige) Argument übergibt. Jeder dieser Methodenaufrufe, gibt das Objekt selbst zurück,
  148. was Verkettung oder "flüssige" Verwendung erlaubt. Der erste Aufruf, oder das erste Argument, das
  149. übergeben wird, wenn man mehr als ein Argument übergeben will, wird immer als die Methode angenommen
  150. wenn ein <classname>Zend_Rest_Server</classname> Service aufgerufen wird.
  151. </para>
  152. <example id="zend.rest.client.args.example-1">
  153. <title>Anfrage Argumente setzen</title>
  154. <programlisting language="php"><![CDATA[
  155. $client = new Zend_Rest_Client('http://example.org/rest');
  156. $client->arg('value1');
  157. $client->arg2('value2');
  158. $client->get();
  159. // oder
  160. $client->arg('value1')->arg2('value2')->get();
  161. ]]></programlisting>
  162. </example>
  163. <para>
  164. Beide Varianten im obigen Beispiel, ergeben die folgenden get-Argumente:
  165. <code>?method=arg&amp;arg1=value1&amp;arg=value1&amp;arg2=value2</code>
  166. </para>
  167. <para>
  168. Es gilt zu bemerken, dass der erste Aufruf von <code>$client->arg('value1');</code> in
  169. beidem resultiert: <code>method=arg&amp;arg1=value1</code> und <code>arg=value1</code>.
  170. Es ist so, dass <classname>Zend_Rest_Server</classname> die Anfrage korrekt versteht,
  171. ohne dass vordefiniertes Wissen über das Service benötigt wird.
  172. </para>
  173. <warning>
  174. <title>Striktheit von Zend_Rest_Client</title>
  175. <para>
  176. Jeder REST Service der strikt in seinen Argumenten ist, die er empfängt, wird wegen
  177. dem oben beschriebenen Verhalten bei der Verwendung von
  178. <classname>Zend_Rest_Client</classname> fehlschlagen. Das ist keine gewöhnliche
  179. Praxis und sollte keine Probleme verursachen.
  180. </para>
  181. </warning>
  182. </sect2>
  183. </sect1>
  184. <!--
  185. vim:se ts=4 sw=4 et:
  186. -->