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'
});