Zend Framework の紹介

 Learning Zend Framework

appendix

 Zend Framework リファレンス


  • 第36章 Zend_Gdata
  • 第37章 Zend_Http
  • 第38章 Zend_InfoCard
  • 第39章 Zend_Json
  • 第40章 Zend_Layout
  • 第41章 Zend_Ldap
  • 第42章 Zend_Loader
  • 第43章 Zend_Locale
  • 第44章 Zend_Log
  • 第45章 Zend_Mail
  • 第46章 Zend_Markup
  • 第47章 Zend_Measure
  • 第48章 Zend_Memory
  • 第49章 Zend_Mime
  • 第50章 Zend_Navigation
  • 第51章 Zend_Oauth
  • 第52章 Zend_OpenId
  • 第53章 Zend_Paginator
  • 第54章 Zend_Pdf
  • 第55章 Zend_ProgressBar
  • 第56章 Zend_Queue
  • 第57章 Zend_Reflection
  • 第58章 Zend_Registry
  • 第59章 Zend_Rest

  • 第60章 Zend_Search_Lucene
  • 第61章 Zend_Serializer
  • 第62章 Zend_Server
  • 第63章 Zend_Service
  • 第64章 Zend_Session
  • 第65章 Zend_Soap
  • 第66章 Zend_Tag
  • 第67章 Zend_Test
  • 第68章 Zend_Text
  • 第69章 Zend_TimeSync
  • 第70章 Zend_Tool
  • 第71章 Zend_Tool_Framework
  • 第72章 Zend_Tool_Project
  • 第73章 Zend_Translate
  • 第74章 Zend_Uri
  • 第75章 Zend_Validate
  • 第76章 Zend_Version
  • 第77章 Zend_View
  • 第78章 Zend_Wildfire
  • 第79章 Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 70.6% Update 2010-11-28 - Revision 23415

    59.2. Zend_Rest_Client

    59.2.1. 導入

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

    例 59.1. 基本的な REST リクエスト

    /**
     * framework.zend.com サーバに接続し、挨拶を受け取ります
     */
    $client = new Zend_Rest_Client('http://framework.zend.com/rest');

    echo 
    $client->sayHello('Davey''Day')->get(); // "Hello Davey, Good Day"

    [注意] コール方法の違い

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

    $client->sayHello('Davey''Day');
    echo 
    $client->get();

    59.2.2. レスポンス

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

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

    例 59.2. レスポンスステータス

    $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 の値あるいは値の配列としてそのオブジェクトを取得できます。

    例 59.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();
    echo 
    $result->firstname() .' '$result->lastname();

    例 59.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>

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

    [注意] 複数の要素

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

    59.2.3. リクエストの引数

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

    例 59.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 の使用に失敗することがあります。 これは上で説明した挙動のせいです。 これはそう頻繁に起こることではないので、特に問題とはならないでしょう。

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...