Zend_Rest_Client(日本語)
導入
Zend_Rest_Client の使用法は、
SoapClient オブジェクト (SOAP ウェブサービス拡張モジュール)
の使用法と非常によく似ています。REST サービスのプロシージャは、簡単に
Zend_Rest_Client のメソッドとしてコールできます。
まず、そのサービスのアドレスを Zend_Rest_Client のコンストラクタに指定します。
基本的な REST リクエスト
sayHello('Davey', 'Day')->get(); // "Hello Davey, Good Day"
]]>
コール方法の違い
Zend_Rest_Client は、
リモートメソッドのコールをできるだけネイティブなメソッドと同様に行おうとします。
唯一の違いは、続けて get() か post()、
put() あるいは delete()
のいずれかのメソッドをコールしなければならないということです。
これは、メソッドの連結で行ってもかまいませんし、
独立したメソッドコールにしてもかまいません。
sayHello('Davey', 'Day');
echo $client->get();
]]>
レスポンス
Zend_Rest_Client を使用して行ったリクエストは、すべて
Zend_Rest_Client_Response オブジェクトを返します。
このオブジェクトには多くのプロパティがあり、結果に簡単にアクセスできます。
Zend_Rest_Server に基づくサービスにアクセスした場合には、
Zend_Rest_Client は結果についていくつかの前提条件を想定しています。
たとえばレスポンスステータス (成功あるいは失敗) や返り値の型などです。
レスポンスステータス
sayHello('Davey', 'Day')->get();
if ($result->isSuccess()) {
echo $result; // "Hello Davey, Good Day"
}
]]>
上の例で、リクエストの結果をオブジェクトとして扱い、
isSuccess() をコールしていることがごらんいただけるでしょう。
また、__toString() をサポートしているため、
単に echo とするだけでオブジェクトの結果を取得できます。
Zend_Rest_Client_Response は、任意のスカラー値を
echo することが可能です。複雑な形式の場合は、
配列記法あるいはオブジェクト記法が使用できます。
しかし、Zend_Rest_Server
を使用していないサービスに問い合わせたいこともあるでしょう。このような場合、
Zend_Rest_Client_Response オブジェクトは
SimpleXMLElement と同様の振る舞いをします。
しかし、より簡単に処理するため、プロパティがルート要素の直下にない場合には
自動的に XPath で XML を探すようにしています。さらに、
プロパティに対してメソッドとしてアクセスすると、
PHP の値あるいは値の配列としてそのオブジェクトを取得できます。
Technorati の Rest サービスの使用
key($key);
$technorati->url('http://pixelated-dreams.com');
$result = $technorati->get();
echo $result->firstname() .' '. $result->lastname();
]]>
Technorati からのレスポンスの例
http://pixelated-dreams.com
Pixelated Dreams
http://pixelated-dreams.com
DShafik
Davey
Shafik
http://pixelated-dreams.com/feeds/index.rss2
http://pixelated-dreams.com/feeds/atom.xml
44
218
2006-04-26 04:36:36 GMT
60635
44
218
]]>
ここで、firstname や
lastname といったプロパティにアクセスできます。
これらはトップレベル要素ではありませんが、
名前を指定するだけで自動的に取得できます。
複数の要素
名前でアクセスしているときにもし複数の項目が見つかったら、
SimpleXMLElements の配列を返します。メソッド記法でアクセスすると、
PHP の値の配列を返します。
リクエストの引数
Zend_Rest_Server ベースのサービスにリクエストを送るのではない場合は、
リクエストの際に複数の引数を指定する必要があります。
これを行うには、引数名と同じ名前のメソッドをコールし、
その最初の (そして唯一の) 引数として値を指定します。
これらのメソッドコールはそのオブジェクト自身を返すので、
メソッドを連結する "流れるような" 形式で使用できます。
最初のコール (あるいは複数の引数を指定した場合の最初の引数)
は常に、Zend_Rest_Server
サービスをコールする際のメソッドとみなされます。
リクエストの引数の設定
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 の使用に失敗することがあります。
これは上で説明した挙動のせいです。
これはそう頻繁に起こることではないので、特に問題とはならないでしょう。