Utiliser le Zend_Rest_Client
est très semblable à l'utilisation des objets de SoapClient
(SOAP web service extension). Vous pouvez simplement appeler les procédures de service de REST comme méthodes de Zend_Rest_Client
. Vous devez indiquer l'adresse complète du service dans le constructeur de Zend_Rest_Client
.
Exemple 26.1. Une requête REST basique
<?php /** * Connection au serveur framework.zend.com server */ 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" ?>
Différences dans les appels | |
---|---|
<?php $client->sayHello('Davey', 'Day'); echo $client->get(); ?> |
Toutes les demandes faites en utilisant Zend_Rest_Client
retourne un objet Zend_Rest_Client_Response
. Cet objet a beaucoup de propriétés qui facilitent l'accès aux résultats.
Quand le service est basé sur Zend_Rest_Server
, Zend_Rest_Client peut faire plusieurs suppositions au sujet de la réponse, y compris le statut de réponse (succès ou échec) et le type de retour.
Exemple 26.2. Etat de la réponse
<?php $result = $client->sayHello('Davey', 'Day')->get(); if ($result->isSuccess()) { echo $result; // "Hello Davey, Good Day" } ?>
Dans l'exemple ci-dessus, vous pouvez voir que nous utilisons le résultat de la demande comme un objet, pour appeler isSuccess()
, et puis grâce à __toString()
, nous pouvons simplement faire echo
sur l'objet pour récupérer le résultat. Zend_Rest_Client_Response
vous permettra de afficher n'importe quelle valeur scalaire. Pour les types complexes, vous pouvez employer la notation type objet ou type tableau.
Si cependant, vous souhaitez questionner un service n'employant pas Zend_Rest_Server
l'objet de Zend_Rest_Client_Response
se comportera comme un SimpleXMLElement
. Cependant, pour faciliter les choses, il questionnera automatiquement le XML en utilisant XPath si la propriété n'est pas un descendant direct de l'élément racine du document. En plus, si vous accédez à une propriété comme à une méthode, vous recevrez la valeur de PHP pour l'objet, ou un tableau de résultats.
Exemple 26.3. Utiliser le service REST Technorati
<?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(); ?>
Exemple 26.4. Exemple de réponse 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>
Ici nous accédons aux propriétés firstname
et lastname
.Bien que ce ne soient pas les éléments supérieurs, elles sont automatiquement retournées quand on accède par le nom.
Eléments multiples | |
---|---|
Si des éléments multiples sont trouvés en accédant à une valeur de nom, un tableau d'élément SimpleXMLElement sera retourné ; l'accès par l'intermédiaire de la notation de méthode renverra un tableau de valeurs. |
A moins que vous ne fassiez une demande à un service basé sur Zend_Rest_Server
, il y a des chances que vous devez envoyer des arguments multiples avec votre requête. Ceci est fait en appelant une méthode avec le nom de l'argument, en passant la valeur comme premier (et seul) argument. Chacun de ces appels de méthode renvoie l'objet lui-même, tenant compte de l'enchaînement, ou de l'utilisation habituelle. Le premier appel, ou le premier argument si vous passez plus d'un argument, est toujours considéré comme la méthode en appelant un service Zend_Rest_Server
.
Exemple 26.5. Affecter des arguments de requêtes
<?php $client = new Zend_Rest_Client('http://example.org/rest'); $client->arg('value1'); $client->arg2('value2'); $client->get(); // or $client->arg('value1')->arg2('value2')->get(); ?>
Les deux méthodes dans l'exemple ci-dessus, auront comme conséquence l'obtention des arguments suivants : ?method=arg&arg1=value1&arg=value1&arg2=value2
Vous noterez que le premier appel de $client->arg('value1');
a eu comme conséquence method=arg&arg1=value1
et arg=value1
; ceci afin que Zend_Rest_Server
puisse comprendre la demande correctement, plutôt que d'exiger la connaissance préalable du service.
Sévérité de Zend_Rest_Client | |
---|---|
Tout service REST qui est strict au sujet des arguments qu'il reçoit échouera probablement en utilisant |