| Module Info
| Add a review of CouchDB-Client
Interface is a bit messy to my taste, sometimes I feel like it would be easier to just use LWP. Also module looks somehow abandoned, it's been quite a long time since the last update, and it's not like there's no space to improve -- there are several forks on GitHub with various fixes and improvements. E.g. I would like to see support for keep-alive connections, currently module creates a new connection for every request which is not very efficient. Generally, when I have a choice I prefer AnyEvent::CouchDB.
I needed an interface to CouchDB for my Storable::CouchDB package. I was planning to rewrite the interface as it is really quite simple. However, having this package made the effort fairly trivial.
There are a few awkward interface issues like the DB and DOC objects do not have "exists" or "persist" methods. They are lazy loading so they could. Currently, you have to ask the CLIENT object if the DB exists and the DB object if the DOC exists.
something() if $doc->exists;
something() if $db->exists;
$doc->persist; #store or create; just do it!
I'm using this module for some projects and until now it works right using it as a proxy object to provide persistence for my Moose classes. I tried DB::CouchDB before and found this module way more complete and more easy to adopt.
I like the easy and clean interface that clearly reminds me of Rose::DB and Rose::DB::Object when it comes to splitting the connection to CouchDB (CouchDB::Client) and the objects stored in it (CouchDB::Client::Doc and ::View). The interface to views is fairly basic, still working correctly.
The only issue I have is a UTF-8 problem: If you're putting some UTF-8 encoded string in you'll get it out in latin1.
I cannot blame this module for this as this problem is specific to "couchdb 0.8.1-incubating" - same occurs when plainly interfacing couchdb by curl or wget, yet I still had to overload the req method to place an ungly encode/decode hack.