Zend_Rest_Client
の使用法は、
SoapClient
オブジェクト (SOAP ウェブサービス拡張モジュール)
の使用法と非常によく似ています。REST サービスのプロシージャは、簡単に
Zend_Rest_Client
のメソッドとしてコールすることができます。
まず、そのサービスのアドレスを Zend_Rest_Client
のコンストラクタに指定します。
例 26.1. 基本的な REST リクエスト
<?php /** * framework.zend.com サーバに接続し、挨拶を受け取ります */ require_once 'Zend/Rest/Client.php'; $client = new Zend_Rest_Client('http://framework.zend.com/rest'); echo $client->sayHello('Davey', 'Day')->get(); // "Hello Davey, Good Day" ?>
コール方法の違い | |
---|---|
<?php $client->sayHello('Davey', 'Day'); echo $client->get(); ?> |
Zend_Rest_Client
を使用して行ったリクエストは、すべて
Zend_Rest_Client_Response
オブジェクトを返します。
このオブジェクトには多くのプロパティがあり、結果に簡単にアクセスすることができます。
Zend_Rest_Server
に基づくサービスにアクセスした場合には、
Zend_Rest_Client
は結果についていくつかの前提条件を想定しています。
たとえばレスポンスステータス (成功あるいは失敗) や返り値の型などです。
例 26.2. レスポンスステータス
<?php $result = $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 の値あるいは値の配列としてそのオブジェクトを取得できます。
例 26.3. Technorati の Rest サービスの使用
<?php require_once 'Zend/Rest/Client.php'; $technorati = new Zend_Rest_Client('http://api.technorati.com/bloginfo'); $technorati->key($key); $technorati->url('http://pixelated-dreams.com'); $result = $technorati->get(); echo $result->firstname() .' '. $result->lastname(); ?>
例 26.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
サービスをコールする際のメソッドとみなされます。
例 26.5. リクエストの引数の設定
<?php $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 サービスでは、
|