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 ]]> ここで、firstnamelastname といったプロパティにアクセスできます。 これらはトップレベル要素ではありませんが、 名前を指定するだけで自動的に取得できます。 複数の要素 名前でアクセスしているときにもし複数の項目が見つかったら、 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 の使用に失敗することがあります。 これは上で説明した挙動のせいです。 これはそう頻繁に起こることではないので、特に問題とはならないでしょう。