restistream

A minimal restful module to build a streaming http backend

npm install restistream
10 downloads in the last week
20 downloads in the last month

Reststream

Reststream uses sbar-inject to inject the function params.

The injeted params are:

  • $dup http-duplex
  • $body JSONStream decoded
  • $auth A function that excepts a function that returns a boolean if is a autherized request.
  • All url params with {around} them
  • All querystring parameters

Create server

var http = require('http'),
    server = http.createServer(),
    rest = require('reststream');

rest.create(http.createServer(), {baseUrl: 'localhost:8989'});
rest.listen(8080);

Supported HTTP methods:

  • GET
    • rest.get(urlToMatch, callback)
  • POST
    • rest.post(urlToMatch, callback)
  • PUT
    • rest.put(urlToMatch, callback)
  • DELETE
    • rest.del(urlToMatch, callback)
  • PATCH
    • rest.patch(urlToMatch, callback)
  • OPTIONS
    • rest.opts(urlToMatch, callback)
  • HEAD (Does not have a response body! Only sends headers!)
    • rest.head(urlToMatch, callback)

All data from the client is in the $dup parameter. And a JSON parsed version of the request body is in the $body parameter.

All routes must be unique!

Create a REST method

rest.post('/api/{foo}/{bar}', function ($dup, foo, $body, bar) {
    var db = someDbMethodThatReturnsAStream(bar, baz);
    $body.pipe(db).pipe($dup);
});

Authenticate

All calls to $auth must be made before any data is sent to $dup.

Not authenticated

rest.get('/api/user/{id}', function ($dup, $body, id, $auth, qsParam, baz) {
    //Accepts any function that returns a boolean that says if the current
    // request is authenticated
    $auth(function () {
        //Not authenticated
        return false;
    });

    $dup.write(id + '|');
    $dup.write(qsParam + '|');
    $dup.write(baz + '|');

    $dup.end();
});

request.get('http://localhost:8080/api/user/1?qsParam=1&baz=false, function (error, response, body) {
    response.statusCode; //401
    body; //'Unauthorized'
});

Authenticated

rest.get('/api/user/{id}', function ($dup, $body, id, $auth, qsParam, baz) {
    //Accepts any function that returns a boolean that says if the current
    // request is authenticated
    $auth(function () {
        //Is authenticated
        return true;
    });

    $dup.write(id + '|');
    $dup.write(qsParam + '|');
    $dup.write(baz + '|');

    $dup.end();
});

request.get('http://localhost:8080/api/user/1?qsParam=55&baz=false, function (error, response, body) {
    response.statusCode; //200
    body; //'1|55|false'
});
npm loves you