Zend_Rest_Client
Introduction
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.
Une requête REST basique
sayHello('Davey', 'Day')->get();
// "Hello Davey, Good Day"
]]>
Différences dans les appels
Zend_Rest_Client tente de rendre les méthodes distantes de la même manière que ses
propres méthodes, la seule différence étant que vous devez suivre l'appel de méthode get(),
post(), put() ou delete(). Cet appel peut être fait par
l'intermédiaire de méthodes enchaînées ou dans des appels séparés de méthode :
sayHello('Davey', 'Day');
echo $client->get();
]]>
Réponses
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.
État de la réponse
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.
Utiliser le service REST Technorati
key($key);
$technorati->url('http://pixelated-dreams.com');
$result = $technorati->get();
echo $result->firstname() .' '. $result->lastname();
]]>
Exemple de réponse 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
]]>
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.
Élé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 retournera un tableau
de valeurs.
Arguments de requêtes
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.
Affecter des arguments de requêtes
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 Zend_Rest_Client, en raison du comportement décrit ci-dessus. Ce n'est pas une
pratique courante et ne devrait pas poser des problèmes.