Die Verwendung von Zend_Rest_Client
ist sehr ähnlich der
Verwendung von SoapClient
Objekten (SOAP Web Service Erweiterung). Man kann
einfach die REST Service Prozeduren als Zend_Rest_Client
Methoden
aufrufen. Spezifiziere die komplette Adresse des Services im Constructor von
Zend_Rest_Client
.
Beispiel 663. Eine Basis REST Anfrage
/** * Verbinden zum framework.zend.com Server und eine Begrüßung empfangen */ $client = new Zend_Rest_Client('http://framework.zend.com/rest'); echo $client->sayHello('Davey', 'Day')->get(); // "Servus Davey, guten Tag"
Unterschiede im Aufruf
Zend_Rest_Client
versucht, dass die entfernten Methoden, so
weit wie möglich, wie die nativen Methoden aussehen, wobei der einzige Unterschied
darin besteht, dass der Methodenaufruf mit get()
,
post()
, put()
oder
delete()
erfolgen muß. Dieser Aufruf kann entweder über
Methoden Verkettung oder in eigenen Methodenaufrufen erfolgen:
$client->sayHello('Davey', 'Tag'); echo $client->get();
Alle Anfragen die über Zend_Rest_Client
gemacht wurden,
liefern ein Zend_Rest_Client_Response
Objekt zurück. Dieses
Objekt hat viele Eigenschaften, was es einfacher macht, auf die Ergebnisse zuzugreifen.
Wenn ein Service auf Zend_Rest_Server
basiert, kann
Zend_Rest_Client
einige Annahmen über die Antwort treffen,
inklusive dem Antwort Status (erfolgreich oder fehlerhaft) und den Rückgabetyp.
Beispiel 664. Antwort Status
$result = $client->sayHello('Davey', 'Tag')->get(); if ($result->isSuccess()) { echo $result; // "Hallo Davey, guten Tag" }
Im obigen Beispiel kann man sehen, dass das Ergebnis der Anfrage als Objekt verwendet
wird, um isSuccess()
aufzurufen. Mithilfe der magischen
__toString()
-Methode kann man das Objekt bzw. das Ergebnis
ausgeben (echo
). Zend_Rest_Client_Response
erlaubt
die Ausgabe jedes skalaren Wertes. Für komplexe Typen, kann entweder die Array- oder die
Objektschreibweise verwendet werden.
Wenn trotzdem ein Service abgefragt wird, der nicht
Zend_Rest_Server
verwendet, wird sich das
Zend_Rest_Client_Response
Objekt mehr wie ein
SimpleXMLElement
verhalten. Um die Dinge trotzdem einfacher zu gestalten,
wird das XML automatisch abgefragt, indem XPath verwendet wird, wenn
die Eigenschaft nicht von direkter Abstammung des Dokument Root-Elements ist.
Zusätzlich, wenn auf eine Eigenschaft als Methode zugegriffen wird, empfängt man den
PHP Wert für das Objekt, oder ein Array mit den
PHP Wert Ergebnissen.
Beispiel 665. Technorati's REST Service verwenden
$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();
Beispiel 666. Beispiel Technorati Antwort
<?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>
Hier greifen wir auf die firstname
und lastname
Eigenschaften
zu. Selbst wenn diese keine Top-Level Elemente sind, werden Sie automatisch
zurückgegeben, wenn auf sie durch ihren Namen zugegriffen wird.
Mehrere Elemente
Wenn beim Zugriff, über einen Namen, mehrere Elemente mit demselben Namen gefunden werden, wird ein Array von SimpleXML-Elementen zurückgegeben. Beim Zugriff über die Methodenschreibweise wird ein Array von PHP Werten zurückgegeben.
Wenn man eine Anfrage an einen Server sendet, welcher nicht auf
Zend_Rest_Server
basiert, sind die Chancen groß, dass man mehrere
Argumente mit der Anfrage senden muß. Das wird durchgeführt, indem man eine Methode mit
dem Namen des Arguments aufruft und den Wert, als das erste (und einzige) Argument
übergibt. Jeder dieser Methodenaufrufe, gibt das Objekt selbst zurück, was Verkettung
oder "flüssige" Verwendung erlaubt. Der erste Aufruf, oder das erste Argument, das
übergeben wird, wenn man mehr als ein Argument übergeben will, wird immer als die
Methode angenommen wenn ein Zend_Rest_Server
Service aufgerufen
wird.
Beispiel 667. Anfrage Argumente setzen
$client = new Zend_Rest_Client('http://example.org/rest'); $client->arg('value1'); $client->arg2('value2'); $client->get(); // oder $client->arg('value1')->arg2('value2')->get();
Beide Varianten im obigen Beispiel, ergeben die folgenden get-Argumente:
?method=arg&arg1=value1&arg=value1&arg2=value2
Es gilt zu bemerken, dass der erste Aufruf von $client->arg('value1');
in
beidem resultiert: method=arg&arg1=value1
und arg=value1
.
Es ist so, dass Zend_Rest_Server
die Anfrage korrekt versteht,
ohne dass vordefiniertes Wissen über das Service benötigt wird.
Striktheit von Zend_Rest_Client
Jeder REST Service der strikt in seinen Argumenten ist, die er empfängt, wird wegen
dem oben beschriebenen Verhalten bei der Verwendung von
Zend_Rest_Client
fehlschlagen. Das ist keine gewöhnliche
Praxis und sollte keine Probleme verursachen.