Zend_Rest_Client.xml 9.1 KB

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