Zend_Service_Nirvanix.xml 17 KB

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