Zend Framework mit CouchDB Teil 2
Hallo und guten Abend,
wie im ersten Teil bereits angekündigt, gibt es Heute die Fortsetzung von unseren Versuchen mit dem Zend Framework und CouchDB unter Ubuntu.
Beschäftigen werden wir uns mit den typischen CRUD Operationen, sprich das Löschen/Anlegen/Ändern von Dokumenten in einer CouchDB.
Wir machen dann direkt dort weiter wo wir aufgehört haben, und legen uns in unserem indexController eine neue Action an, passend zu der Aktion bezeichnen wir diese als insertdocAction().
Das Dokument soll eine von uns vergebene ID erhalten.
public function insertdocAction() { // IP und Port der Datenbank $couchDb = 'http://192.168.2.102:5984/limespacededb'; $client = new Zend_Http_Client(); // Unsere Daten packen wir in ein Array $dokument = array( 'title' => 'LimeSpace.de CouchDB', 'text' => 'Dieses ist ein ganz toller Test von den LimeSpacern', 'inserted' => time(), ); // Encoden nach JSON $prepared = json_encode($dokument); // Daten an die DB senden mit der ID "TEST_ID" $response = $client->setUri($couchDb . '/TEST_ID') ->setRawData($prepared, 'text/json') ->request('PUT'); echo $response->getBody(); // sollte 201 sein }
Wenn wir / ihr jetzt die Action aufruft, sollte in eurem Browser eine positive Meldung erscheinen:
{„ok“:true,“id“:“TEST_ID“,“rev“:“1-e9363d789d4abba0e6621ec7f8d9461c“}
Übrigens: Es ist uns bewusst das die Code – Beispiele absolut nicht perfekt sind, wenn man ernsthaft mit CouchDB arbeiten möchte, sollte man sich ein kleines Framework basteln, um gut und schnell die wiederkehrenden Aufgaben erledigen zu können, eine fertige library haben wir bisher leider nicht gefunden.
Ok weiter mit dem Anzeigen von Dokumenten aus unserer Datenbank.
Wir legen uns wieder eine neue Aktion an „readdocAction“ , im echten Leben würde man dort jetzt sicherlich auf Parameter prüfen etc, aber wir lesen nur das Dokument mit der eben vergebenen „TEST_ID“ und lassen uns direkt das eigentlich im JSON Format vorliegende Ergebnis in ein Array umwandeln.
public function readdocAction() { // IP und Port der Datenbank $couchDb = 'http://192.168.2.102:5984/limespacededb/'; $id = urlencode('TEST_ID'); // sicher ist sicher $client = new Zend_Http_Client(); $response = $client->setUri($couchDb . $id) ->request('GET'); $responseArray = json_decode($response->getBody(), true); var_export($responseArray); }
Und tatsächlich, da haben wir wieder unser Dokument:
array ( '_id' => 'TEST_ID', '_rev' => '1-e9363d789d4abba0e6621ec7f8d9461c', 'title' => 'LimeSpace.de CouchDB', 'text' => 'Dieses ist ein ganz toller Test von den LimeSpacern', 'inserted' => 1258395810, )
Jetzt geht es an der Ändern von Dokumenten, hier merkt man nun den Unterschied zu einer normalen SQL Datenbank, man kann nicht nur ein einzelnes Feld in einem Dokument ändern sondern nur das komplette Dokument. Dafür wird dann die entsprechende _rev ID gebraucht (aus readdocAction).
public function changedocAction() { // IP und Port der Datenbank $couchDb = 'http://192.168.2.102:5984/limespacededb'; $client = new Zend_Http_Client(); $revId = ''; // _rev ID des Dokuments // Unsere Daten packen wir in ein Array $dokument = array( '_rev' => $revId, // <-- REF ID 'title' => 'LimeSpace.de CouchDB und mehr', 'text' => 'Dieses ist ein ganz toller Test von den LimeSpacern', 'inserted' => time(), ); // Encoden nach JSON $prepared = json_encode($dokument); // Daten an die DB senden mit der ID "TEST_ID" $response = $client->setUri($couchDb . '/TEST_ID') ->setRawData($prepared, 'text/json') ->request('PUT'); echo $response->getBody(); // sollte 201 + neue _revid seib }
Zum Ausprobieren empfehlen wir einfach die readdocAction auszuführen, revID in die Action kopieren und los geht es 🙂
Das einfachste ist wie immer das Löschen von Dokumenten, auch hier müsst ihr die revID des Dokuments kennen:
public function deletedocAction() { $id = 'TEST_ID'; $revId = ''; $couchDb = 'http://192.168.2.102:5984/limespacededb/'; $client = new Zend_Http_Client(); $response = $client->setUri($couchDb . $id .'?rev=' . $revId) ->request('DELETE'); echo $response->getStatus(); // bei richtiger rev id sollte es 200 sein. }
Wir haben fertig. Fazit: Eine nette Sache, wenn man sich mal eine passende kleine library geschrieben hat, und ein passendes vielleicht sehr JavaScript lastiges Projekt hat dürfte das viel Spaß machen.
Wir sind auf eure Versuche und Erfahrungen gespannt.
P.s. (07.12.2009) : Da wir einige Anfragen zu Büchern erhalten haben, wir können euch wärmstens folgendes Buch zum Einstieg in CouchDB empfehlen:
Neue Kommentare