Zend_Rest_Client.xml 8.9 KB

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