Zend_Rest_Client.xml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 15103 -->
  4. <sect1 id="zend.rest.client">
  5. <title>Zend_Rest_Client</title>
  6. <sect2 id="zend.rest.client.introduction">
  7. <title>導入</title>
  8. <para>
  9. <classname>Zend_Rest_Client</classname> の使用法は、
  10. <code>SoapClient</code> オブジェクト (<ulink
  11. url="http://www.php.net/soap">SOAP ウェブサービス拡張モジュール</ulink>)
  12. の使用法と非常によく似ています。REST サービスのプロシージャは、簡単に
  13. <classname>Zend_Rest_Client</classname> のメソッドとしてコールすることができます。
  14. まず、そのサービスのアドレスを <classname>Zend_Rest_Client</classname> のコンストラクタに指定します。
  15. </para>
  16. <example id="zend.rest.client.introduction.example-1">
  17. <title>基本的な REST リクエスト</title>
  18. <programlisting role="php"><![CDATA[
  19. /**
  20. * framework.zend.com サーバに接続し、挨拶を受け取ります
  21. */
  22. $client = new Zend_Rest_Client('http://framework.zend.com/rest');
  23. echo $client->sayHello('Davey', 'Day')->get(); // "Hello Davey, Good Day"
  24. ]]>
  25. </programlisting>
  26. </example>
  27. <note>
  28. <title>コール方法の違い</title>
  29. <para>
  30. <classname>Zend_Rest_Client</classname> は、
  31. リモートメソッドのコールをできるだけネイティブなメソッドと同様に行おうとします。
  32. 唯一の違いは、続けて <code>get()</code> か <code>post()</code>、
  33. <code>put()</code> あるいは <code>delete()</code>
  34. のいずれかのメソッドをコールしなければならないということです。
  35. これは、メソッドの連結で行ってもかまいませんし、
  36. 独立したメソッドコールにしてもかまいません。
  37. </para>
  38. <programlisting role="php"><![CDATA[
  39. $client->sayHello('Davey', 'Day');
  40. echo $client->get();
  41. ]]>
  42. </programlisting>
  43. </note>
  44. </sect2>
  45. <sect2 id="zend.rest.client.return">
  46. <title>レスポンス</title>
  47. <para>
  48. <classname>Zend_Rest_Client</classname> を使用して行ったリクエストは、すべて
  49. <classname>Zend_Rest_Client_Response</classname> オブジェクトを返します。
  50. このオブジェクトには多くのプロパティがあり、結果に簡単にアクセスすることができます。
  51. </para>
  52. <para>
  53. <classname>Zend_Rest_Server</classname> に基づくサービスにアクセスした場合には、
  54. <classname>Zend_Rest_Client</classname> は結果についていくつかの前提条件を想定しています。
  55. たとえばレスポンスステータス (成功あるいは失敗) や返り値の型などです。
  56. </para>
  57. <example id="zend.rest.client.return.example-1">
  58. <title>レスポンスステータス</title>
  59. <programlisting role="php"><![CDATA[
  60. $result = $client->sayHello('Davey', 'Day')->get();
  61. if ($result->isSuccess()) {
  62. echo $result; // "Hello Davey, Good Day"
  63. }
  64. ]]>
  65. </programlisting>
  66. </example>
  67. <para>
  68. 上の例で、リクエストの結果をオブジェクトとして扱い、
  69. <code>isSuccess()</code> をコールしていることがごらんいただけるでしょう。
  70. また、<code>__toString()</code> をサポートしているため、
  71. 単に <code>echo</code> とするだけでオブジェクトの結果を取得できます。
  72. <classname>Zend_Rest_Client_Response</classname> は、任意のスカラー値を
  73. echo することが可能です。複雑な形式の場合は、
  74. 配列記法あるいはオブジェクト記法が使用できます。
  75. </para>
  76. <para>
  77. しかし、<classname>Zend_Rest_Server</classname>
  78. を使用していないサービスに問い合わせたいこともあるでしょう。このような場合、
  79. <classname>Zend_Rest_Client_Response</classname> オブジェクトは
  80. <code>SimpleXMLElement</code> と同様の振る舞いをします。
  81. しかし、より簡単に処理するため、プロパティがルート要素の直下にない場合には
  82. 自動的に XPath で XML を探すようにしています。さらに、
  83. プロパティに対してメソッドとしてアクセスすると、
  84. PHP の値あるいは値の配列としてそのオブジェクトを取得できます。
  85. </para>
  86. <example id="zend.rest.client.return.example-2">
  87. <title>Technorati の Rest サービスの使用</title>
  88. <programlisting role="php"><![CDATA[
  89. $technorati = new Zend_Rest_Client('http://api.technorati.com/bloginfo');
  90. $technorati->key($key);
  91. $technorati->url('http://pixelated-dreams.com');
  92. $result = $technorati->get();
  93. echo $result->firstname() .' '. $result->lastname();
  94. ]]>
  95. </programlisting>
  96. </example>
  97. <example id="zend.rest.client.return.example-3">
  98. <title>Technorati からのレスポンスの例</title>
  99. <programlisting role="xml"><![CDATA[
  100. <?xml version="1.0" encoding="utf-8"?>
  101. <!-- generator="Technorati API version 1.0 /bloginfo" -->
  102. <!DOCTYPE tapi PUBLIC "-//Technorati, Inc.//DTD TAPI 0.02//EN"
  103. "http://api.technorati.com/dtd/tapi-002.xml">
  104. <tapi version="1.0">
  105. <document>
  106. <result>
  107. <url>http://pixelated-dreams.com</url>
  108. <weblog>
  109. <name>Pixelated Dreams</name>
  110. <url>http://pixelated-dreams.com</url>
  111. <author>
  112. <username>DShafik</username>
  113. <firstname>Davey</firstname>
  114. <lastname>Shafik</lastname>
  115. </author>
  116. <rssurl>
  117. http://pixelated-dreams.com/feeds/index.rss2
  118. </rssurl>
  119. <atomurl>
  120. http://pixelated-dreams.com/feeds/atom.xml
  121. </atomurl>
  122. <inboundblogs>44</inboundblogs>
  123. <inboundlinks>218</inboundlinks>
  124. <lastupdate>2006-04-26 04:36:36 GMT</lastupdate>
  125. <rank>60635</rank>
  126. </weblog>
  127. <inboundblogs>44</inboundblogs>
  128. <inboundlinks>218</inboundlinks>
  129. </result>
  130. </document>
  131. </tapi>
  132. ]]>
  133. </programlisting>
  134. </example>
  135. <para>
  136. ここで、<code>firstname</code> や
  137. <code>lastname</code> といったプロパティにアクセスすることができます。
  138. これらはトップレベル要素ではありませんが、
  139. 名前を指定するだけで自動的に取得することができます。
  140. </para>
  141. <note>
  142. <title>複数の要素</title>
  143. <para>
  144. 名前でアクセスしているときにもし複数の項目が見つかったら、
  145. SimpleXMLElements の配列を返します。メソッド記法でアクセスすると、
  146. PHP の値の配列を返します。
  147. </para>
  148. </note>
  149. </sect2>
  150. <sect2 id="zend.rest.client.args">
  151. <title>リクエストの引数</title>
  152. <para>
  153. <classname>Zend_Rest_Server</classname> ベースのサービスにリクエストを送るのではない場合は、
  154. リクエストの際に複数の引数を指定する必要があります。
  155. これを行うには、引数名と同じ名前のメソッドをコールし、
  156. その最初の (そして唯一の) 引数として値を指定します。
  157. これらのメソッドコールはそのオブジェクト自身を返すので、
  158. メソッドを連結する "流れるような" 形式で使用できます。
  159. 最初のコール (あるいは複数の引数を指定した場合の最初の引数)
  160. は常に、<classname>Zend_Rest_Server</classname>
  161. サービスをコールする際のメソッドとみなされます。
  162. </para>
  163. <example id="zend.rest.client.args.example-1">
  164. <title>リクエストの引数の設定</title>
  165. <programlisting role="php"><![CDATA[
  166. $client = new Zend_Rest_Client('http://example.org/rest');
  167. $client->arg('value1');
  168. $client->arg2('value2');
  169. $client->get();
  170. // あるいは
  171. $client->arg('value1')->arg2('value2')->get();
  172. ]]>
  173. </programlisting>
  174. </example>
  175. <para>
  176. 上の例の二通りの方法はいずれも、次のような get 引数となります。
  177. <code>?method=arg&amp;arg1=value1&amp;arg=value1&amp;arg2=value2</code>
  178. </para>
  179. <para>
  180. 最初の <code>$client->arg('value1');</code> のコールが
  181. <code>method=arg&amp;arg1=value1</code> および <code>arg=value1</code>
  182. の二通りの結果となることにお気づきでしょう。これによって、
  183. <classname>Zend_Rest_Server</classname> がリクエストを適切に理解できるようになるのです。
  184. そのサービスを使用するにあたっての前提知識を必要としなくなります。
  185. </para>
  186. <warning>
  187. <title>Zend_Rest_Client の厳格性</title>
  188. <para>
  189. 受け取る引数について厳格な REST サービスでは、
  190. <classname>Zend_Rest_Client</classname> の使用に失敗することがあります。
  191. これは上で説明した挙動のせいです。
  192. これはそう頻繁に起こることではないので、特に問題とはならないでしょう。
  193. </para>
  194. </warning>
  195. </sect2>
  196. </sect1>
  197. <!--
  198. vim:se ts=4 sw=4 et:
  199. -->