Zend_Service_Nirvanix.xml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15157 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.service.nirvanix">
  5. <title>Zend_Service_Nirvanix</title>
  6. <sect2 id="zend.service.nirvanix.introduction">
  7. <title>Einführung</title>
  8. <para>
  9. Nirvanix bietet ein Internet Media File System (IMFS), einen Internet Speicher Service
  10. der es Anwendungen erlaubt Dateien hochzuladen, zu speichern, zu organisieren und
  11. nachhaltig auf Sie zuzugreifen durch Verwendung eines Standard Web Service Interfaces.
  12. Ein IMFS ist ein verteiltes geclustertes Dateisystem, auf das über das Internet
  13. zugegriffen wird, und das für die Handhabung mit Mediendateien (Audio, Video, usw.)
  14. optimiert ist. Das Ziel eines IMFA ist es massive Skalarität zu bieten um den
  15. Problemen des Wachstums der Medienspeicher Herr zu werden, mit garantiertem Zugriff und
  16. Erreichbarkeit unabhängig von Zeit und Ort. Letztendlich, gibt eine IMFS Anwendung die
  17. Möglichkeit auf Daten sicher zuzugreifen, ohne die großen Fixkosten die mit der
  18. Beschaffung und Einrichtung von physikalischen Speicherbänken verbunden sind.
  19. </para>
  20. </sect2>
  21. <sect2 id="zend.service.nirvanix.registering">
  22. <title>Registrierung bei Nirvanix</title>
  23. <para>
  24. Bevor man mit <classname>Zend_Service_Nirvanix</classname> beginnt, muß man sich zuerst für einen
  25. Account anmelden. Bitte sehen Sie auf die
  26. <ulink url="http://www.nirvanix.com/gettingStarted.aspx">Wie man anfängt</ulink> Seite auf
  27. der Nirvanix Webseite für weitere Informationen.
  28. </para>
  29. <para>
  30. Nach der Registrierung erhält man einen Benutzernamen, ein Passwort und einen
  31. Anwendungsschlüssel. Alle drei werden benötigt um <classname>Zend_Service_Nirvanix</classname> zu
  32. verwenden.
  33. </para>
  34. </sect2>
  35. <sect2 id="zend.service.nirvanix.apiDocumentation">
  36. <title>API Dokumentation</title>
  37. <para>
  38. Der Zugriff auf Nirvanix IMFS ist durch beide, sowohl ein SOAP als auch ein schnelleres
  39. REST Service möglich. <classname>Zend_Service_Nirvanix</classname> bietet einen relativ dünnen
  40. PHP 5 Wrapper um das REST Service.
  41. </para>
  42. <para>
  43. <classname>Zend_Service_Nirvanix</classname> zielt darauf ab das Nirvanix REST Service einfacher
  44. zu verwenden aber zu verstehen das das Service selbst trotzdem noch essentiell ist um
  45. mit Nirvanix erfolgreich zu sein.
  46. </para>
  47. <para>
  48. Die <ulink url="http://developer.nirvanix.com/sitefiles/1000/API.html">Nirvanix API
  49. Dokumentation</ulink> bietet eine Übersicht sowie detailierte Informationen über die
  50. Verwendung des Services. Bitte machen Sie sich mit diesem Dokument vertraut und
  51. referieren Sie darauf wenn Sie <classname>Zend_Service_Nirvanix</classname> verwenden.
  52. </para>
  53. </sect2>
  54. <sect2 id="zend.service.nirvanix.features">
  55. <title>Features</title>
  56. <para>
  57. Nirvanix's REST Service kann mit PHP effektiv verwendet werden alleine mit Hilfe der
  58. <ulink url="http://www.php.net/simplexml">SimpleXML</ulink> Erweiterung und
  59. <classname>Zend_Http_Client</classname>. Trotzdem ist deren Verwendung auf diesem Weg irgendwie
  60. unbequem wegen der wiederholenden Operationen, wie die Übergabe des Session Tokens bei
  61. jeder Anfrage und der wiederholten Prüfung des Antwort Bodys nach Fehlercodes.
  62. </para>
  63. <para>
  64. <classname>Zend_Service_Nirvanix</classname> bietet die folgenden Funktionalitäten:
  65. <itemizedlist>
  66. <listitem>
  67. <para>
  68. Einen einzelnen Punkt für die Konfiguration der Nirvanix Authentifizierungs
  69. Daten die mit den Nirvanix Namespaces verwendet werden können.
  70. </para>
  71. </listitem>
  72. <listitem>
  73. <para>
  74. Ein Proxy Objekt das viel bequemer ist als ein HTTP Client alleine,
  75. hauptsächlich wird die Notwendigkeit entfernt die HTTP POST Anfrage manuell
  76. zu erstellen um auf das REST Service zugreifen zu können.
  77. </para>
  78. </listitem>
  79. <listitem>
  80. <para>
  81. Ein verantwortlicher Wrapper der jeden Antwortbody parst und eine Ausnahme
  82. wirft wenn ein Fehler aufgetreten ist, was die Notwendigkeit mildert
  83. widerholt den Erfolg der vielen Kommandos zu prüfen.
  84. </para>
  85. </listitem>
  86. <listitem>
  87. <para>
  88. Zusätzliche bequeme Methoden für einige oder die meisten üblichen Operationen.
  89. </para>
  90. </listitem>
  91. </itemizedlist>
  92. </para>
  93. </sect2>
  94. <sect2 id="zend.service.nirvanix.storing-your-first">
  95. <title>Der Anfang</title>
  96. <para>
  97. Sobald man in Nirvanix registriert ist, ist man bereit die ersten Datein am IMFS zu
  98. speichern. Die üblichste Operation die man am IMFS benötigt ist der Erstellung einer
  99. neuen Datei, das Herunterladen bestehender Dateien, und das Löschen einer Datei.
  100. <classname>Zend_Service_Nirvanix</classname> bietet bequeme Methoden für diese drei Operationen.
  101. </para>
  102. <programlisting role="php"><![CDATA[
  103. $auth = array('username' => 'Dein-Benutzername',
  104. 'password' => 'Dein-Passwort',
  105. 'appKey' => 'Dein-App-Schlüssel');
  106. $nirvanix = new Zend_Service_Nirvanix($auth);
  107. $imfs = $nirvanix->getService('IMFS');
  108. $imfs->putContents('/foo.txt', 'zu speichernder Inhalt');
  109. echo $imfs->getContents('/foo.txt');
  110. $imfs->unlink('/foo.txt');
  111. ]]></programlisting>
  112. <para>
  113. Der erste Schritt um <classname>Zend_Service_Nirvanix</classname> zu verwenden ist immer sich
  114. gegenüber dem Service zu authentifizieren. Das wird durch die Übergabe der Anmeldedaten
  115. an den Kontruktor von <classname>Zend_Service_Nirvanix</classname>, wie oben, gemacht. Das
  116. assoziative Array wurd direkt an Nirvanix als POST Parameter übergeben.
  117. </para>
  118. <para>
  119. Nirvanix teilt seine WebService in
  120. <ulink url="http://developer.nirvanix.com/sitefiles/1000/API.html#_Toc175999879">Namespaces</ulink>
  121. auf. Jeder Namespace kapselt eine Gruppe von zusammengehörenden Operationen. Nachdem
  122. man eine Instanz von <classname>Zend_Service_Nirvanix</classname> erhalten hat, muß die
  123. <code>getService()</code> Methode aufgerufen werden um einen Proxy für den Namespace zu
  124. erhalten den man verwenden will. Oben wird ein Proxy für den <code>IMFS</code>
  125. Namespace erstellt.
  126. </para>
  127. <para>
  128. Nachdem man den Proxy für den Namespace hat den man verwenden will, muß die Methode auf
  129. Ihm aufgerufen werden. Der Proxy erlaubt es jedes Kommando zu verwenden das in der
  130. REST API vorhanden ist. Der Proxy kann auch bequeme Methoden verfügbar machen, welche
  131. Kommandos des Web Services wrappen. Das obige Beispiel zeigt die Verwendung der
  132. bequemen IMFS Methoden um eine neue Datei zu erstellen, sie zu empfangen, diese
  133. Datei anzuzeigen und letztendlich die Datei zu löschen.
  134. </para>
  135. </sect2>
  136. <sect2 id="zend.service.nirvanix.understanding-proxy">
  137. <title>Den Proxy verstehen</title>
  138. <para>
  139. Im vorherigen Beispiel wurde die <code>getService()</code> Methode verwendet um ein
  140. Proxy Objekt zum <code>IMFS</code> Namespace zurückzugeben. Das Proxy Objekt erlaubt es
  141. das Nirvanix REST Service in einer Art zu verwenden die näher daran ist wie
  142. normalerweise ein PHP Methodenaufruf durchgeführt wird, gegenüber der Erstellung von
  143. eigenen HTTP Anfrage Objekten.
  144. </para>
  145. <para>
  146. Ein Proxy Objekt kann bequeme Methoden enthalten. Das sind Methoden die
  147. <classname>Zend_Service_Nirvanix</classname> bietet um die Verwendung der Nirvanix Web Services
  148. zu vereinfachen. Im vorigen Beispiel haben die Methoden <code>putContents()</code>,
  149. <code>getContents()</code>, und <code>unlink()</code> keine direkte Entsprechungen in
  150. der REST API. Das sind bequeme Methoden die von <classname>Zend_Service_Nirvanix</classname>
  151. angeboten werden um viel komplexere Operationen der REST API zu abstrahieren.
  152. </para>
  153. <para>
  154. Für alle anderen Methodenaufrufe zum Proxy Objekt konvertiert der Proxy dynamisch den
  155. Methodenaufruf in die entsprechende HTTP POST Anfrage zur REST API. Hierbei wird der
  156. Name der Methode als API Kommando verwendet, und ein assoziatives Array im ersten
  157. Argument als POST Parameter.
  158. </para>
  159. <para>
  160. Nehmen wir an das wir die REST API Methode
  161. <ulink url="http://developer.nirvanix.com/sitefiles/1000/API.html#_Toc175999923">RenameFile</ulink>
  162. aufrufen wollen welche keine bequeme Methode in <classname>Zend_Service_Nirvanix</classname>
  163. besitzen:
  164. </para>
  165. <programlisting role="php"><![CDATA[
  166. $auth = array('username' => 'Dein-Benutzername',
  167. 'password' => 'Dein-Passwort',
  168. 'appKey' => 'Dein-App-Schlüssel');
  169. $nirvanix = new Zend_Service_Nirvanix($auth);
  170. $imfs = $nirvanix->getService('IMFS');
  171. $result = $imfs->renameFile(array('filePath' => '/path/to/foo.txt',
  172. 'newFileName' => 'bar.txt'));
  173. ]]></programlisting>
  174. <para>
  175. Oben wird ein Proxy für den <code>IMFS</code> erstellt. Eine Methode,
  176. <code>renameFile()</code>, wird dann vom Proxy aufgerufen. Diese Methode existiert
  177. nicht als bequeme Methode im PHP Code, deswegen wird Sie durch <code>__call()</code>
  178. gefangen und in eine POST Anfrage für die REST API umgewandelt wo das assoziative
  179. Array als POST Parameter verwendet wird.
  180. </para>
  181. <para>
  182. Es ist in der Nirvanix API Dokumentation zu beachten das <code>sessionToken</code>
  183. für diese Methode benötigt wird, wir dieses aber nicht an das Proxy Objekt übbergeben
  184. haben. Es wird, der Bequemlichkeit halber, automatisch hinzugefügt.
  185. </para>
  186. <para>
  187. Das Ergebnis dieser Operation ist entweder ein
  188. <classname>Zend_Service_Nirvanix_Response</classname> Objekt das das von Nirvanix zurückgegebene
  189. XLP wrappt, oder <classname>Zend_Service_Nirvanix_Exception</classname> wenn ein Fehler
  190. aufgetreten ist.
  191. </para>
  192. </sect2>
  193. <sect2 id="zend.service.nirvanix.examining-results">
  194. <title>Ergebnisse erkunden</title>
  195. <para>
  196. Die Nirvanix REST API gibt Ihre Ergebnisse immer in einem XML zurück.
  197. <classname>Zend_Service_Nirvanix</classname> parst dieses XML mit der <code>SimpleXML</code>
  198. Erweiterung und dekoriert dann das sich ergebende <code>SimpleXMLElement</code>
  199. mit einem <classname>Zend_Service_Nirvanix_Response</classname> Objekt.
  200. </para>
  201. <para>
  202. Der einfachste Weg ein Ergebnis vom service zu betrachten ist die Verwendung der
  203. in PHP eingebauten Funktionen wie <code>print_r()</code>:
  204. </para>
  205. <programlisting role="php"><![CDATA[
  206. <?php
  207. $auth = array('username' => 'Dein-Benutzername',
  208. 'password' => 'Dein-Passwort',
  209. 'appKey' => 'Dein-App-Schlüssel');
  210. $nirvanix = new Zend_Service_Nirvanix($auth);
  211. $imfs = $nirvanix->getService('IMFS');
  212. $result = $imfs->putContents('/foo.txt', 'Vierzehn Bytes');
  213. print_r($result);
  214. ?>
  215. Zend_Service_Nirvanix_Response Object
  216. (
  217. [_sxml:protected] => SimpleXMLElement Object
  218. (
  219. [ResponseCode] => 0
  220. [FilesUploaded] => 1
  221. [BytesUploaded] => 14
  222. ))
  223. ]]></programlisting>
  224. <para>
  225. Auf jede Eigenschaft oder Methode des dekorierten <code>SimpleXMLElement</code>s kann
  226. zugegriffen werden. Im obigen Beispiel, könnte <code>$result->BytesUploaded</code>
  227. verwendet werden um die anzahl von empfangenen Bytes zu sehen. Sollte man auf das
  228. <code>SimpleXMLElement</code> direkt zugreifen wollen, kann einfach
  229. <code>$result->getSxml()</code> verwendet werden.
  230. </para>
  231. <para>
  232. Die üblichste Antwort von Nirvanix ist Erfolg (<code>ResponseCode</code> von Null).
  233. Es ist normalerweise nicht notwendig <code>ResponseCode</code> zu prüfen weil
  234. jedes nicht-null Ergebnis eine <classname>Zend_Service_Nirvanix_Exception</classname> wirft.
  235. Siehe das nächste Kapitel über die Behandlung von Fehlern.
  236. </para>
  237. </sect2>
  238. <sect2 id="zend.service.nirvanix.handling-errors">
  239. <title>Fehler behandeln</title>
  240. <para>
  241. Wenn Nirvanix verwendet wird, ist es wichtig Fehler zu vermeiden die vom Service
  242. zurückgegeben werden können und diese entsprechend zu behandeln.
  243. </para>
  244. <para>
  245. Alle Operationen gegenüber dem REST Service ergeben einen XML RückgabePayload der
  246. ein <code>ResponseCode</code> Element, wie im folgenden Beispiel, enthält:
  247. </para>
  248. <programlisting role="xml"><![CDATA[
  249. <Response>
  250. <ResponseCode>0</ResponseCode>
  251. </Response>
  252. ]]></programlisting>
  253. <para>
  254. Wenn <code>ResponseCode</code> Null ist, wie im obigen Beispiel, war die Operation
  255. erfolgreich. Wenn die Operation nicht erfolgreich war, ist <code>ResponseCode</code>
  256. nicht-Null und ein <code>ErrorMessage</code> Element sollte vorhanden sein.
  257. </para>
  258. <para>
  259. Um die Notwendigkeit zu verringern immer zu Prüfen ob <code>ResponseCode</code> Null
  260. ist, prüft <classname>Zend_Service_Nirvanix</classname> automatisch jede von Nirvanix
  261. zurückgegebene Antwort. Wenn <code>ResponseCode</code> einen Fehler zeigt, wird eine
  262. <classname>Zend_Service_Nirvanix_Exception</classname> geworfen.
  263. </para>
  264. <programlisting role="xml"><![CDATA[
  265. $auth = array('username' => 'your-username',
  266. 'password' => 'your-password',
  267. 'appKey' => 'your-app-key');
  268. $nirvanix = new Zend_Service_Nirvanix($auth);
  269. try {
  270. $imfs = $nirvanix->getService('IMFS');
  271. $imfs->unlink('/a-nonexistant-path');
  272. } catch (Zend_Service_Nirvanix_Exception $e) {
  273. echo $e->getMessage() . "\n";
  274. echo $e->getCode();
  275. }
  276. ]]></programlisting>
  277. <para>
  278. im obigen Beispiel ist <code>unlink()</code> eine bequeme Methode die das
  279. <code>DeleteFiles</code> der REST API wrappt. Der <code>filePath</code> Parameter wird
  280. vom <ulink url="http://developer.nirvanix.com/sitefiles/1000/API.html#_Toc175999918">DeleteFiles</ulink>
  281. Kommando benötigt und enthält einen Pfad der nicht existiert. Das wird in einer
  282. <classname>Zend_Service_Nirvanix</classname> Ausnahme resultieren die, mit der Nachricht
  283. "Invalid Path" und Code 70005, geworfen wird.
  284. </para>
  285. <para>
  286. Die <ulink url="http://developer.nirvanix.com/sitefiles/1000/API.html">Nirvanix API
  287. Dokumentation</ulink> beschreibt die mit jedem Kommando assoziierten Fehler.
  288. Abhängig von den eigenen Bedürfnissen kann jedes Kommando in einen <code>try</code>
  289. Block eingebettet werden oder aus Bequemlichkeit, viele Kommandos im selben
  290. <code>try</code> Block.
  291. </para>
  292. </sect2>
  293. </sect1>