A Redis HTTP interface with JSON output
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Nicolas Favre-Felix 9d2beaceec Added JSONP. 14 years ago
hiredis First import. 14 years ago
jansson Small refactoring. 14 years ago
Makefile Added JSON output. 14 years ago
README.markdown Added JSONP. 14 years ago
cmd.c Added JSONP. 14 years ago
cmd.h Added JSONP. 14 years ago
conf.c Better conf parsing. 14 years ago
conf.h Added simplistic config file. 14 years ago
json.c Added JSONP. 14 years ago
json.h Added JSONP. 14 years ago
turnip.c Better HTTP response code. 14 years ago
turnip.conf Better conf parsing. 14 years ago

README.markdown

About

A very simple prototype providing an HTTP interface to Redis. It uses hiredis and jansson.

make clean all
./turnip &
curl http://127.0.0.1:7379/SET/hello/world
curl http://127.0.0.1:7379/GET/hello
→ “world”

curl -d "GET/hello" http://127.0.0.1:7379/
→ “world”

Ideas

  • Add meta-data info per key (MIME type in a second key, for instance).
  • Find a way to format multi-bulk data without JSON.
  • Support PUT, DELETE, HEAD?
  • Add logging.
  • Add support for Redis UNIX socket.
  • Enrich config file:
    • Provide timeout (this needs to be added to hiredis first.)
    • Restrict commands by IP range
  • Send your ideas using the github tracker or on twitter @yowgi.

HTTP error codes that could be used (although that's not the case at the moment)

  • Missing key: 404 Not Found
  • Timeout on the redis side: 503 Service Unavailable
  • Unknown verb: 405 Method Not Allowed

JSON output

The URI /COMMAND/arg0/arg1/.../argN returns a JSON object with the command as a key and the result as a value.

Examples:

// string
$ curl  http://127.0.0.1:7379/GET/y
{"GET":"41"}

// number
$ curl  http://127.0.0.1:7379/INCR/y
{"INCR":42}

// list
$ curl  http://127.0.0.1:7379/LRANGE/x/0/1
{"LRANGE":["abc","def"]}

// status
$ curl  http://127.0.0.1:7379/TYPE/y
{"TYPE":[true,"string"]}

// error, which is basically a status
$ curl  http://127.0.0.1:7379/MAKE-ME-COFFEE
{"MAKE-ME-COFFEE":[false,"ERR unknown command 'MAKE-ME-COFFEE'"]}


// JSONP callback:
$ curl  "http://127.0.0.1:7379/TYPE/y?jsonp=myCustomFunction"
myCustomFunction({"TYPE":[true,"string"]})