A lot of people, when first learning about Cassandra, wonder why there isn't any easier (say, RESTful) way to perform operations. I did. It didn't take someone very long to point out that it mainly has to do with performance. Cassandra spends a significant amount of resources marshaling data and Thrift currently does that very efficiently.
This is clearly a proof of concept, but I think it demonstrates that the idea is sound and could be implemented fairly quickly. Maintenance would be another story. One problem with maintaining the Cassandra Avro bindings is that they regularly get out of sync with what is capable using Thrift. An HTTP Cassandra wrapper would suffer the same fate without an active champion. I'm interested, but I'm not *that* interested.
Anyway, have fun.
-- DETAILS --
The following URI formats are expected:
/get/keyspace/column_family/row_id/super_column/column_start/column_end/consistency_level. If you don't want to pass it in, leave it blank. Empty strings are interpreted as null when appropriate.
Here is an example from my tests: http://127.0.0.1:9160/get/Keyspace1/Standard1/1//10/11/ONE
The main thing to deduce here is that the super column is empty (see the double slash?). If you haven't realized by now, I've gone ahead with the assumption that your keys and column names are strings. This isn't good enough. All the details we need to become type-aware are available in the comparator for the column family. As a shortcut for now, you can append "?asString" to the end of the URI to have all byte values converted to strings. Without it they are displayed as hex.
Updating works the same way: /set/keyspace/coumn_family/row_key/super_column/column/value/consistency_level
UPDATE: I went ahead and created two additional implementations that use jetty (bare and with servlets). This generated a bit more code, but opens up the way to getting sophisticated with sessions.