Usar Zend_Rest_Client es muy similar a usar
objetos SoapClient (extensión de servicios web SOAP).
Simplemente puede llamar a los procedimientos del servicio REST como
métodos de Zend_Rest_Client. Especifique la dirección
completa del servicio en el constructor de Zend_Rest_Client.
Ejemplo 60.1. Una petición REST básica
/**
* Connect to framework.zend.com server and retrieve a greeting
*/
$client = new Zend_Rest_Client('http://framework.zend.com/rest');
echo $client->sayHello('Davey', 'Day')->get(); // "Hello Davey, Good Day"
![]() |
Diferencias en la forma de llamar |
|---|---|
|
$client->sayHello('Davey', 'Day');
echo $client->get();
|
Todas las peticiones realizadas usando Zend_Rest_Client devuelven un
objeto Zend_Rest_Client_Response. Este objeto tiene muchas
propiedades que facilitan el acceso a los resultados.
Cuando el servicio se basa en Zend_Rest_Server,
Zend_Rest_Client puede hacer varias suposiciones sobre la
respuesta, incluyendo el estado de la respuesta (éxito o fallo) y el tipo de
retorno.
Ejemplo 60.2. Estado de la respuesta
$result = $client->sayHello('Davey', 'Day')->get();
if ($result->isSuccess()) {
echo $result; // "Hello Davey, Good Day"
}
En el ejemplo anterior, puede ver que usamos el resultado de la petición como
un objeto, para llamar a isSuccess(), y luego, gracias a
__toString(), podemos simplemente hacer echo del
objeto para obtener el resultado. Zend_Rest_Client_Response
le permitirá hacer echo de cualquier valor escalar. Para tipos complejos, puede
usar la notación de array o de objeto.
Si, en cambio, desea consultar un servicio que no usa
Zend_Rest_Server, el objeto
Zend_Rest_Client_Response se comportará más como
un SimpleXMLElement. Sin embargo, para facilitar las cosas,
consultará automáticamente el XML usando XPath si la propiedad no
es un descendiente directo del elemento raíz del documento. Además, si
accede a una propiedad como un método, recibirá el valor PHP
para el objeto, o un array de resultados de valores PHP.
Ejemplo 60.3. Uso del servicio Rest de Technorati
$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();
Ejemplo 60.4. Ejemplo de respuesta de 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>
Aquí estamos accediendo a las propiedades firstname y
lastname. Aunque no son
elementos de primer nivel, se devuelven automáticamente al ser accedidos por
su nombre.
![]() |
Elementos múltiples |
|---|---|
Si se encuentran múltiples elementos al acceder a un valor por nombre, se devolverá un array de SimpleXMLElements; el acceso mediante notación de método devolverá un array de valores PHP. |
A menos que esté realizando una petición a un servicio basado en
Zend_Rest_Server, es probable que necesite enviar múltiples
argumentos con su petición. Esto se hace llamando a un método con el nombre
del argumento, pasando el valor como primer (y único) argumento.
Cada una de estas llamadas a métodos devuelve el propio objeto, permitiendo el
encadenamiento, o un uso "fluido". Se asume siempre que la primera llamada, o el
primer argumento si pasa más de uno, es el
método al llamar a un servicio Zend_Rest_Server.
Ejemplo 60.5. Establecimiento de argumentos de la petición
$client = new Zend_Rest_Client('http://example.org/rest');
$client->arg('value1');
$client->arg2('value2');
$client->get();
// or
$client->arg('value1')->arg2('value2')->get();
Ambos métodos del ejemplo anterior darán como resultado los
siguientes argumentos get:
?method=arg&arg1=value1&arg=value1&arg2=value2
Notará que la primera llamada de
$client->arg('value1'); dio como resultado tanto
method=arg&arg1=value1 como arg=value1;
esto es para que Zend_Rest_Server pueda entender la
petición correctamente, en lugar de requerir un conocimiento previo de
el servicio.
![]() |
Rigidez de Zend_Rest_Client |
|---|---|
Cualquier servicio REST que sea estricto respecto a los argumentos que recibe probablemente fallará
al usar |
![[Note]](images/note.png)
![[Warning]](images/warning.png)