Return-Path: Delivered-To: apmail-hadoop-hbase-dev-archive@locus.apache.org Received: (qmail 42345 invoked from network); 16 Dec 2008 20:57:05 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 16 Dec 2008 20:57:05 -0000 Received: (qmail 86489 invoked by uid 500); 16 Dec 2008 20:57:17 -0000 Delivered-To: apmail-hadoop-hbase-dev-archive@hadoop.apache.org Received: (qmail 86470 invoked by uid 500); 16 Dec 2008 20:57:17 -0000 Mailing-List: contact hbase-dev-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: hbase-dev@hadoop.apache.org Delivered-To: mailing list hbase-dev@hadoop.apache.org Received: (qmail 86459 invoked by uid 99); 16 Dec 2008 20:57:17 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 16 Dec 2008 12:57:17 -0800 X-ASF-Spam-Status: No, hits=-1998.5 required=10.0 tests=ALL_TRUSTED,WEIRD_PORT X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 16 Dec 2008 20:57:04 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 4C969234C3F7 for ; Tue, 16 Dec 2008 12:56:44 -0800 (PST) Message-ID: <2141440793.1229461004312.JavaMail.jira@brutus> Date: Tue, 16 Dec 2008 12:56:44 -0800 (PST) From: "Brian Beggs (JIRA)" To: hbase-dev@hadoop.apache.org Subject: [jira] Created: (HBASE-1064) HBase REST xml/json improvements MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org HBase REST xml/json improvements -------------------------------- Key: HBASE-1064 URL: https://issues.apache.org/jira/browse/HBASE-1064 Project: Hadoop HBase Issue Type: Improvement Components: rest Reporter: Brian Beggs I've begun work on creating a REST based interface for HBase that can use both JSON and XML and would be extensible enough to add new formats down the road. I'm at a point with this where I would like to submit it for review and to get feedback as I continue to work towards new features. Attached to this issue you will find the patch for the changes to this point along with a necessary jar file for the JSON serialization. Also below you will find my notes on how to use what is finished with the interface to this point. This patch is based off of jira issues: HBASE-815 and HBASE-816 I am interested on gaining feedback on: -what you guys think works -what doesn't work for the project -anything that may need to be added -code style -anything else... Finished components: -framework around parsing json/xml input -framework around serialzing xml/json output -changes to exception handing -changes to the response object to better handle the serializing of output data -table CRUD calls -Full table fetching -creating/fetching scanners TODO: -fix up the filtering with scanners -row insert/delete operations -individual row fetching -cell fetching interface -scanner use interface Here are the wiki(ish) notes for what is done to this point: REST Service for HBASE Notes: GET / -retrieves a list of all the tables with their meta data in HBase curl -v -H "Accept: text/xml" -X GET -T - http://localhost:60050/ curl -v -H "Accept: application/json" -X GET -T - http://localhost:60050/ POST / -Create a table curl -H "Content-Type: text/xml" -H "Accept: text/xml" -v -X POST -T - http://localhost:60050/newTable test14 subscription 2 NONE false true
Response: 200success JSON: curl -H "Content-Type: application/json" -H "Accept: application/json" -v -X POST -T - http://localhost:60050/newTable {"name":"test5", "column_families":[{ "name":"columnfam1", "bloomfilter":true, "time_to_live":10, "in_memory":false, "max_versions":2, "compression":"", "max_value_length":50, "block_cache_enabled":true } ]} *NOTE* this is an enum defined in class HColumnDescriptor.CompressionType GET /[table_name] -returns all records for the table curl -v -H "Accept: text/xml" -X GET -T - http://localhost:60050/tablename curl -v -H "Accept: application/json" -X GET -T - http://localhost:60050/tablename GET /[table_name] -Parameter Action metadata - returns the metadata for this table. regions - returns the regions for this table curl -v -H "Accept: text/xml" -X GET -T - http://localhost:60050/pricing1?action=metadata Update Table PUT /[table_name] -updates a table curl -v -H "Content-Type: text/xml" -H "Accept: text/xml" -X PUT -T - http://localhost:60050/pricing1 subscription 3 NONE false true subscription1 3 NONE false true curl -v -H "Content-Type: application/json" -H "Accept: application/json" -X PUT -T - http://localhost:60050/pricing1 {"column_families":[{ "name":"columnfam1", "bloomfilter":true, "time_to_live":10, "in_memory":false, "max_versions":2, "compression":"", "max_value_length":50, "block_cache_enabled":true }, { "name":"columnfam2", "bloomfilter":true, "time_to_live":10, "in_memory":false, "max_versions":2, "compression":"", "max_value_length":50, "block_cache_enabled":true } ]} Delete Table curl -v -H "Content-Type: text/xml" -H "Accept: text/xml" -X DELETE -T - http://localhost:60050/TEST16 creating a scanner curl -v -H "Content-Type: application/json" -H "Accept: application/json" -X POST -T - http://localhost:60050/TEST16?action=newscanner //TODO fix up the scanner filters. response: xml: 2 json: {"id":1} Using a scanner curl -v -H "Content-Type: application/json" -H "Accept: application/json" -X POST -T - "http://localhost:60050/TEST16?action=scan&scannerId=&numrows=" This would be my first submission to an open source project of this size, so please, give it to me rough. =) Thanks. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.