juillet
2009
CouchDB est un projet de l’ASF (Apache Software Foundation).
Il s’agit d’une base de données avec une interface RestFul – JSON. Comme j’adore tout ce qui exploite pleinement HTTP, je me penche depuis quelques temps sur couchDB, notamment pour la participation à la création d’un frontEnd PHP pour Zend Framework : Zend_Couch (nom temporaire)
Qu’est ce couchDB ?
- Un serveur de base de données orienté document (relationnel dans un sens, mais pas objet), accessible via une API JSON RESTful
- Distribué, robuste et à réplication incrémentale. Détection de conflit gérée
- Requêtable et indexable, langage de requête Javascript
Comment ça s’utilise ? De manière RESTFul, orienté document. Voyons ca.
Déja l’installation, on peut difficilement faire plus simple si on passe par un gestionnaire de paquets comme aptitude de Ubuntu :
julien@julien:~$ aptitude install couchdb
Le service est démarré, il écoute via HTTP sur le port 5984 par défaut.
Attention, la magie HTTP va commencer.
Créons une base de données :
julien@julien:~$ curl -X PUT http://localhost:5984/membres/ {"ok":true}
La base de données existe-t-elle réellement ? On va vérifier :
julien@julien:~$ curl -X GET http://localhost:5984/membres/ {"db_name":"membres","doc_count":0,"doc_del_count":0,"update_seq":0,"compact_running":false,"disk_size":4096}
Bien, on va commencer par créer un jeu de données. Créons un utilisateur :
julien@julien:~$ curl -X POST http://localhost:5984/membres/ -H "Content-Type: application/json" -d "{\"name\":\"julien\",\"age\":\"26\",\"address\":\"Paris\"}" {"ok":true,"id":"f9177159ee3d82d969f5337ffad9d406","rev":"362692096"}
Sympa ! surtout que couchDB regorge de petites astuces, je ne vais pas toutes les citer, mais par exemple il a attribué un numéro automatique à ce nouveau membre, dans une colonne « privée » appelée « _id ». Il sait aussi gérer les révisions à la manière d’un système de versionning type SVN ou Git.
Aller, on récupère ce membre ?
julien@julien:~$ curl -X GET http://localhost:5984/membres/f9177159ee3d82d969f5337ffad9d406 {"_id":"f9177159ee3d82d969f5337ffad9d406","_rev":"362692096","name":"julien","age":"26","address":"Paris"}
Yeah ! Détruisons la base :
julien@julien:~$ curl -v -X DELETE http://localhost:5984/membres/ {"ok":true}
Au passage, je peux avoir un aperçu de mon serveur en HTML si je le souhaite, via l’URL http://localhosy:5984/_utils/ et il existe encore tout un tas d’astuces de ce type réunies dans la doc officielle.
Pourquoi utiliser couchDB, dans quels cas ? Et bien un de ces auteurs vous répondra sans doute mieux que moi, mais pour des architectures plutôt petites, souvent interrogées, devant être scalables et partageables, c’est parfait !
Il existe d’ailleurs un livre sur le sujet.
Page d’intro à CouchDB
Wiki et documentation opérationnelle
Implémentation en PHP
Note : pour tous ceux qui se demandent encore ce que c’est que REST et un service RESTful, vous avez là une réponse très précise : un service orienté ressource qui brille par l’absence d’authentification et d’identification des clients, et via lequel HTTP et notamment les verbes HTTP sont très largement exploités à leur pleine puissance (avec tous les en-têtes qui vont bien en accord avec HTTP). En général, la représentation des ressources se fait via XML, mais JSON peut aussi tout à fait être adapté, ou encore HTML. J’adore décidément ces architectures !
4 Commentaires + Ajouter un commentaire
Commentaires récents
Archives
- novembre 2010
- août 2010
- juillet 2010
- juin 2010
- mai 2010
- avril 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- juin 2009
- mai 2009
- avril 2009
- mars 2009
- février 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007
- avril 2007
- mars 2007
- février 2007
un tuto qui m’a bien expliqué couchDB : http://www.unixgarden.com/index.php/web/couchdb-la-base-de-donnees-qui-change-tout
Oui je sais bien qu’il existe des sytèmes d’authentification sous HTTP , mais les services RESTful ne requièrent aucune authentification et aucune manière d’identifier leurs clients.
Un service RESTful, dans les règles de l’art, doit toujours servir la même réponse à une requête donnée. Si la réponse change en fonction du client qui pose effectue la requête, alors ça n’est plus indépendant du client et plus RESTful.
C’est ce que je voulais dire, peut-être mal exprimé, certes.
>un service orienté ressource qui brille par l’absence d’authentification et d’identification des clients
Mais pas du tout mon cher julien ! HTTP possède un système d’authentification. Et donc peut très bien être utilisé en REST/RESTfull !
Salut,
CouchDB a en effet l’air très intéressant. Si je ne me trompe pas, il me semble que l’équipe de développement d’eZ Publish est entrain de sérieusement s’intéresser à ce type de base de données.
Je serais tout de même curieux de voir comment cette base de données tient la charger