5.2. Zend_Rest_Client
Prev | Chapter 5. Zend_Rest | Next

## 5.2. Zend_Rest_Client

### 5.2.1. Introduction

Using the `Zend_Rest_Client` is very similar to using `SoapClient` objects (SOAP web service extension). You can simply call the REST service procedures as `Zend_Rest_Client` methods. Specify the service's full address in the `Zend_Rest_Client` constructor.

Example 5.1. A basic REST request

    <?php
    /**
     * Connect to framework.zend.com server and retrieve a greeting
     */
    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"

    ?>

| Note
`Zend_Rest_Client` attempts to make remote methods look as much like native methods as possible, the only difference being that you must follow the method call with one of either `get()`,`post()`,`put()` or `delete()`.

### 5.2.2. Responses

All requests made using `Zend_Rest_Client` return a `Zend_Rest_Client_Response` object. This object has many properties that make it easier to access the results.

When the service is based on `Zend_Rest_Server`, `Zend_Rest_Client` can make several assumptions about the response, including response status (success or failure) and return type.

Example 5.2. Response Status

    <?php
    require_once 'Zend/Rest/Client.php';

    $result = $client->sayHello('Davey', 'Day')->get();

    if ($result->isSuccess()) {
        echo $result; // "Hello Davey, Good Day"
    }
    ?>

In the example above, you can see that we use the request result as an object, to call `isSuccess()`, and then because of `__toString()`, we can simply `echo` the object to get the result. `Zend_Rest_Client_Response` will allow you to echo any scalar value - that is of string, integer or boolean values. For complex types, you can use either array or object notation.

If however, you wish to query a service not using `Zend_Rest_Server` the `Zend_Rest_Client_Response` object will behave more like a `SimpleXMLElement`. However, to make things easier, it will automatically query the XML using XPath if the property is not a direct descendent of the document root element.

Example 5.3. Using Technorati's Rest Service

    <?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;

    ?>

Example 5.4. Example Technorati Response

    <?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>

Here we are accessing the `firstname` and `lastname` properties. Even though these are not top-level elements, they are automatically returned when accessed by name.

| Note
If multiple items are found when accessing a value by name, an array will be returned.

Prev | Up | Next
Chapter 5. Zend_Rest | Home | 5.3. Zend_Rest_Server