Zend_Rest_Client.xml 10 KB

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