Zend_Rest_Client
Einführung
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.
Eine Basis REST Anfrage
sayHello('Davey', 'Day')->get(); // "Servus Davey, guten Tag"
]]>
Unterschiede im Aufruf
Zend_Rest_Client versucht das die entfernten Methoden, so weit wie möglich, wie die
nativen Methoden aussehen, wobei der einzige Unterschied darin besteht das der Methodenaufruf mit
get(), post(), put() oder delete() erfolgen muß.
Dieser Aufruf kann entweder über Methoden Verkettung oder in eigenen Methodenaufrufen erfolgen:
sayHello('Davey', 'Tag');
echo $client->get();
]]>
Antworten
Alle Anfragen die über Zend_Rest_Client gemacht wurden, retournieren ein
Zend_Rest_Client_Response Objekt. 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.
Antwort Status
sayHello('Davey', 'Tag')->get();
if ($result->isSuccess()) {
echo $result; // "Hallo Davey, guten Tag"
}
]]>
Im obigen Beispiel kann man sehen das das Anfrage Ergebnis als Objekt verwendet wird, um
isSuccess() aufzurufen, und dann kann das Objekt wegen __toString() einfach
ausgegeben (echo) werden um das Ergebnis zu erhalten. Zend_Rest_Client_Response
erlaubt die Ausgabe jedes skalaren Wertes. Für komplexe Typen, kann entweder die Array oder die Objekt
Schreibweise 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.
Technorati's Rest Service verwenden
key($key);
$technorati->url('http://pixelated-dreams.com');
$result = $technorati->get();
echo $result->firstname() .' '. $result->lastname();
]]>
Beispiel Technorati Antwort
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
]]>
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.
Mehrfache Teile
Wenn mehrfache Teile gefunden werden wenn auf man einen Wert durch seinen Namen zugreift, wird ein
Array von SimpleXMLElementen zurückgegeben; beim Zugriff über die Methodenschreibweise wird ein
Array von PHP Werten zurückgegeben.
Anfrage Argumente
Wenn man keine Anfrage an einen Zend_Rest_Server basierenden Server durchführt, sind die
Chancen groß das 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.
Anfrage Argumente setzen
arg('value1');
$client->arg2('value2');
$client->get();
// oder
$client->arg('value1')->arg2('value2')->get();
]]>
Beide der Methoden im obigen Beispiel, ergeben die folgenden get Argumente:
?method=arg&arg1=value1&arg=value1&arg2=value2
Es gilt zu bemerken das der erste Aufruf von $client->arg('value1'); in beidem resultiert
method=arg&arg1=value1 und arg=value1; Es ist so das
Zend_Rest_Server die Anfrage korrekt versteht, anstatt das vor-definiertes 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.