Programmer's Reference Guide
| 導入 |
Zend_Rest_Client
導入
Zend_Rest_Client の使用法は、
SoapClient オブジェクト (» SOAP ウェブサービス拡張モジュール)
の使用法と非常によく似ています。REST サービスのプロシージャは、簡単に
Zend_Rest_Client のメソッドとしてコールすることができます。
まず、そのサービスのアドレスを Zend_Rest_Client のコンストラクタに指定します。
例1 基本的な REST リクエスト
- /**
- * framework.zend.com サーバに接続し、挨拶を受け取ります
- */
- $client = new Zend_Rest_Client('http://framework.zend.com/rest');
注意: コール方法の違い
Zend_Rest_Client は、 リモートメソッドのコールをできるだけネイティブなメソッドと同様に行おうとします。 唯一の違いは、続けてget()かpost()、put()あるいはdelete()のいずれかのメソッドをコールしなければならないということです。 これは、メソッドの連結で行ってもかまいませんし、 独立したメソッドコールにしてもかまいません。
$client->sayHello('Davey', 'Day');
レスポンス
Zend_Rest_Client を使用して行ったリクエストは、すべて Zend_Rest_Client_Response オブジェクトを返します。 このオブジェクトには多くのプロパティがあり、結果に簡単にアクセスすることができます。
Zend_Rest_Server に基づくサービスにアクセスした場合には、 Zend_Rest_Client は結果についていくつかの前提条件を想定しています。 たとえばレスポンスステータス (成功あるいは失敗) や返り値の型などです。
例2 レスポンスステータス
- $result = $client->sayHello('Davey', 'Day')->get();
- if ($result->isSuccess()) {
- }
上の例で、リクエストの結果をオブジェクトとして扱い、
isSuccess() をコールしていることがごらんいただけるでしょう。
また、__toString() をサポートしているため、
単に echo とするだけでオブジェクトの結果を取得できます。
Zend_Rest_Client_Response は、任意のスカラー値を
echo することが可能です。複雑な形式の場合は、
配列記法あるいはオブジェクト記法が使用できます。
しかし、Zend_Rest_Server
を使用していないサービスに問い合わせたいこともあるでしょう。このような場合、
Zend_Rest_Client_Response オブジェクトは
SimpleXMLElement と同様の振る舞いをします。
しかし、より簡単に処理するため、プロパティがルート要素の直下にない場合には
自動的に XPath で XML を探すようにしています。さらに、
プロパティに対してメソッドとしてアクセスすると、
PHP の値あるいは値の配列としてそのオブジェクトを取得できます。
例3 Technorati の Rest サービスの使用
- $technorati = new Zend_Rest_Client('http://api.technorati.com/bloginfo');
- $technorati->key($key);
- $technorati->url('http://pixelated-dreams.com');
- $result = $technorati->get();
例4 Technorati からのレスポンスの例
- <?xml version="1.0" encoding="utf-8"?>
- <!-- generator="Technorati API version 1.0 /bloginfo" -->
- <!DOCTYPE tapi PUBLIC "-//Technorati, Inc.//DTD TAPI 0.02//EN"
- "http://api.technorati.com/dtd/tapi-002.xml">
- <tapi version="1.0">
- <document>
- <result>
- <url>http://pixelated-dreams.com</url>
- <weblog>
- <name>Pixelated Dreams</name>
- <url>http://pixelated-dreams.com</url>
- <author>
- <username>DShafik</username>
- <firstname>Davey</firstname>
- <lastname>Shafik</lastname>
- </author>
- <rssurl>
- http://pixelated-dreams.com/feeds/index.rss2
- </rssurl>
- <atomurl>
- http://pixelated-dreams.com/feeds/atom.xml
- </atomurl>
- <inboundblogs>44</inboundblogs>
- <inboundlinks>218</inboundlinks>
- <lastupdate>2006-04-26 04:36:36 GMT</lastupdate>
- <rank>60635</rank>
- </weblog>
- <inboundblogs>44</inboundblogs>
- <inboundlinks>218</inboundlinks>
- </result>
- </document>
- </tapi>
ここで、firstname や
lastname といったプロパティにアクセスすることができます。
これらはトップレベル要素ではありませんが、
名前を指定するだけで自動的に取得することができます。
注意: 複数の要素
名前でアクセスしているときにもし複数の項目が見つかったら、 SimpleXMLElements の配列を返します。メソッド記法でアクセスすると、 PHP の値の配列を返します。
リクエストの引数
Zend_Rest_Server ベースのサービスにリクエストを送るのではない場合は、 リクエストの際に複数の引数を指定する必要があります。 これを行うには、引数名と同じ名前のメソッドをコールし、 その最初の (そして唯一の) 引数として値を指定します。 これらのメソッドコールはそのオブジェクト自身を返すので、 メソッドを連結する "流れるような" 形式で使用できます。 最初のコール (あるいは複数の引数を指定した場合の最初の引数) は常に、Zend_Rest_Server サービスをコールする際のメソッドとみなされます。
例5 リクエストの引数の設定
- $client = new Zend_Rest_Client('http://example.org/rest');
- $client->arg('value1');
- $client->arg2('value2');
- $client->get();
- // あるいは
- $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 がリクエストを適切に理解できるようになるのです。
そのサービスを使用するにあたっての前提知識を必要としなくなります。
Zend_Rest_Client の厳格性
受け取る引数について厳格な REST サービスでは、 Zend_Rest_Client の使用に失敗することがあります。 これは上で説明した挙動のせいです。 これはそう頻繁に起こることではないので、特に問題とはならないでしょう。
| 導入 |
