Documentation

Zend_Rest_Client(日本語) - Zend_Rest

Zend_Rest_Client(日本語)

導入

Zend_Rest_Client の使用法は、 SoapClient オブジェクト (» SOAP ウェブサービス拡張モジュール) の使用法と非常によく似ています。REST サービスのプロシージャは、簡単に Zend_Rest_Client のメソッドとしてコールできます。 まず、そのサービスのアドレスを Zend_Rest_Client のコンストラクタに指定します。

Example #1 基本的な REST リクエスト

  1. /**
  2. * framework.zend.com サーバに接続し、挨拶を受け取ります
  3. */
  4. $client = new Zend_Rest_Client('http://framework.zend.com/rest');
  5.  
  6. echo $client->sayHello('Davey', 'Day')->get(); // "Hello Davey, Good Day"

Note: コール方法の違い
Zend_Rest_Client は、 リモートメソッドのコールをできるだけネイティブなメソッドと同様に行おうとします。 唯一の違いは、続けて get()post()put() あるいは delete() のいずれかのメソッドをコールしなければならないということです。 これは、メソッドの連結で行ってもかまいませんし、 独立したメソッドコールにしてもかまいません。

  1. $client->sayHello('Davey', 'Day');
  2. echo $client->get();

レスポンス

Zend_Rest_Client を使用して行ったリクエストは、すべて Zend_Rest_Client_Response オブジェクトを返します。 このオブジェクトには多くのプロパティがあり、結果に簡単にアクセスできます。

Zend_Rest_Server に基づくサービスにアクセスした場合には、 Zend_Rest_Client は結果についていくつかの前提条件を想定しています。 たとえばレスポンスステータス (成功あるいは失敗) や返り値の型などです。

Example #2 レスポンスステータス

  1. $result = $client->sayHello('Davey', 'Day')->get();
  2.  
  3. if ($result->isSuccess()) {
  4.     echo $result; // "Hello Davey, Good Day"
  5. }

上の例で、リクエストの結果をオブジェクトとして扱い、 isSuccess() をコールしていることがごらんいただけるでしょう。 また、 __toString() をサポートしているため、 単に echo とするだけでオブジェクトの結果を取得できます。 Zend_Rest_Client_Response は、任意のスカラー値を echo することが可能です。複雑な形式の場合は、 配列記法あるいはオブジェクト記法が使用できます。

しかし、Zend_Rest_Server を使用していないサービスに問い合わせたいこともあるでしょう。このような場合、 Zend_Rest_Client_Response オブジェクトは SimpleXMLElement と同様の振る舞いをします。 しかし、より簡単に処理するため、プロパティがルート要素の直下にない場合には 自動的に XPath で XML を探すようにしています。さらに、 プロパティに対してメソッドとしてアクセスすると、 PHP の値あるいは値の配列としてそのオブジェクトを取得できます。

Example #3 Technorati の Rest サービスの使用

  1. $technorati = new Zend_Rest_Client('http://api.technorati.com/bloginfo');
  2. $technorati->key($key);
  3. $technorati->url('http://pixelated-dreams.com');
  4. $result = $technorati->get();
  5. echo $result->firstname() .' '. $result->lastname();

Example #4 Technorati からのレスポンスの例

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- generator="Technorati API version 1.0 /bloginfo" -->
  3. <!DOCTYPE tapi PUBLIC "-//Technorati, Inc.//DTD TAPI 0.02//EN"
  4.                       "http://api.technorati.com/dtd/tapi-002.xml">
  5. <tapi version="1.0">
  6.     <document>
  7.         <result>
  8.             <url>http://pixelated-dreams.com</url>
  9.             <weblog>
  10.                 <name>Pixelated Dreams</name>
  11.                 <url>http://pixelated-dreams.com</url>
  12.                 <author>
  13.                     <username>DShafik</username>
  14.                     <firstname>Davey</firstname>
  15.                     <lastname>Shafik</lastname>
  16.                 </author>
  17.                 <rssurl>
  18.                     http://pixelated-dreams.com/feeds/index.rss2
  19.                 </rssurl>
  20.                 <atomurl>
  21.                     http://pixelated-dreams.com/feeds/atom.xml
  22.                 </atomurl>
  23.                 <inboundblogs>44</inboundblogs>
  24.                 <inboundlinks>218</inboundlinks>
  25.                 <lastupdate>2006-04-26 04:36:36 GMT</lastupdate>
  26.                 <rank>60635</rank>
  27.             </weblog>
  28.             <inboundblogs>44</inboundblogs>
  29.             <inboundlinks>218</inboundlinks>
  30.         </result>
  31.     </document>
  32. </tapi>

ここで、firstnamelastname といったプロパティにアクセスできます。 これらはトップレベル要素ではありませんが、 名前を指定するだけで自動的に取得できます。

Note: 複数の要素
名前でアクセスしているときにもし複数の項目が見つかったら、 SimpleXMLElements の配列を返します。メソッド記法でアクセスすると、 PHP の値の配列を返します。

リクエストの引数

Zend_Rest_Server ベースのサービスにリクエストを送るのではない場合は、 リクエストの際に複数の引数を指定する必要があります。 これを行うには、引数名と同じ名前のメソッドをコールし、 その最初の (そして唯一の) 引数として値を指定します。 これらのメソッドコールはそのオブジェクト自身を返すので、 メソッドを連結する "流れるような" 形式で使用できます。 最初のコール (あるいは複数の引数を指定した場合の最初の引数) は常に、Zend_Rest_Server サービスをコールする際のメソッドとみなされます。

Example #5 リクエストの引数の設定

  1. $client = new Zend_Rest_Client('http://example.org/rest');
  2.  
  3. $client->arg('value1');
  4. $client->arg2('value2');
  5. $client->get();
  6.  
  7. // あるいは
  8.  
  9. $client->arg('value1')->arg2('value2')->get();

上の例の二通りの方法はいずれも、次のような get 引数となります。 ?method=arg&arg1=value1&arg=value1&arg2=value2

最初の $client->arg('value1'); のコールが method=arg&arg1=value1 および arg=value1 の二通りの結果となることにお気づきでしょう。これによって、 Zend_Rest_Server がリクエストを適切に理解できるようになるのです。 そのサービスを使用するにあたっての前提知識を必要としなくなります。

Warning

Zend_Rest_Client の厳格性

受け取る引数について厳格な REST サービスでは、 Zend_Rest_Client の使用に失敗することがあります。 これは上で説明した挙動のせいです。 これはそう頻繁に起こることではないので、特に問題とはならないでしょう。

Copyright

© 2006-2018 by Zend, a Rogue Wave Company. Made with by awesome contributors.

This website is built using zend-expressive and it runs on PHP 7.

Contacts