Awesome
level-connect
Connect to a multi handle sublevel enabled leveldb over http
Getting Started
Level-connect doesn’t really care whether it is global or not, but the easiest way (although probably least useful) to get started is to install it globally
npm i -g level-connect
Control the server instance with environment variables and fire it up
$ CONNECT_PORT=5000 connect
Logs use bunyan so any of the tooling should let you inspect the logs.
Party party
The underlying db is a level-party instance, although it is also sublevelled. This means you can access the db from multiple processes, all on different ports.
$ CONNECT_PORT=5000 ./bin/connect
$ CONNECT_PORT=5001 ./bin/connect
$ curl -X POST \
-H 'X-LEVEL-CONNECT: <client_id>' \
-H 'Content-Type: application/json' \
-d '{"foo":"bar"}' \
localhost:5000/users/foo
> 201 {"body":"ok"}
$ curl -X GET \
-H 'X-LEVEL-CONNECT: <client_id>' \
localhost:5001/users/foo
> 200 {"foo":"bar"}
$ curl -X DELETE \
-H 'X-LEVEL-CONNECT: <client_id>' \
localhost:5001/users/foo
> 200 {"body":"ok"}
$ curl -X GET \
-H 'X-LEVEL-CONNECT: <client_id>' \
localhost:5001/users/foo
> 404 {"foo":"bar"}
API
Control the server instance with environment variables
CONNECT_PORT <Integer>
default 5000
The port to attach to
CONNECT_PATH <String>
default HOME/.level-connect.lev
The path to the db to connect to
DEBUG <Boolean>
default false
If true will whack out some extra logs
HTTP API
Negotiating the handshake
Level-connect implements a fairly crude token based authentication model using custom headers. To grab a new token use /new
POST /new
$ curl -i -X POST -H 'X-LEVEL-CONNECT: new' host:port/new
201
{"id":"ID-STRING"}
The id token should be used in the X-LEVEL-CONNECT
header for all subsequent requests.
Tokens stay fresh for 3 days and are refreshed with each use.
POST /:sublevel/:key
Puts a single value into a specific sublevel at key
$ curl -i -X POST \
-H 'X-LEVEL-CONNECT: <id>' \
-H 'Content-Type: application/json' \
-d '{"name":"Josh","scopes":"user"}'
host:port/users/josh
201
{"body":"OK"}
GET /:sublevel/:key
Grabs a single value from sublevel at key
$ curl -i -X GET \
-H 'X-LEVEL-CONNECT: <id>' \
host:port/users/josh
200
{"name":"Josh","scopes":"user"}
DELETE /:sublevel/:key
Deletes a single value from sublevel at key
$ curl -i -X DELETE \
-H 'X-LEVEL-CONNECT: <id>' \
host:port/users/josh
204
POST /:sublevel
Batches many values to the sublevel
$ curl -i -X POST \
-H 'X-LEVEL-CONNECT: <id>' \
-H 'Content-Type: application/json' \
-d '[{"name":"Josh","scopes":"user"},{"name":"Jane","scopes":"admin"}]'
host:port/users
201
{"body":"OK"}
GET /:sublevel
Streams many values from the sublevel
$ curl -i -X GET \
-H 'X-LEVEL-CONNECT: <id>' \
host:port/users
200
{"name":"Josh","scopes":"user"}
{"name":"Jane","scopes":"admin"}