em-rest-service

RESTful Service Middleware for ee-webservice

npm install em-rest-service
1 downloads in the last day
22 downloads in the last week
24 downloads in the last month

em-rest-service

RESTful Service Middleware for ee-webservice

installation

npm install em-rest-service

build status

Build Status

usage

You need to create controllers for each collection and each resource you plan to make available via the service. a collection is a collection of resources ( «/user» ), a resource is a single resource of a collection ( «/user/3» ).

URLs must be formatted as «collection/id» pairs so that they can parsed by the service

bad

  • user/comment
  • user
  • user/4/comment/images

good

  • /user/4/comment
  • /user
  • /user/4/comment/6/image

See the Joinbox RESTFul Style Guide for more information.

controller

var   Class         = require('ee-class');

module.exports = new Class({

    // handles the get request on the collection
    get: function(request, response, next) {
        log( request.resource ) // the id of the resource
        log( request.mapping ) // a tree of colelctions which
                               // describe the mapping this resource resides on

        if (request.mapping){
            // the url called was /user/:id/comment/:id 
            // this could be another mapping if there are multiple mappings
            // for the comments collection / resource
            response.render( 200, [] );
        }
        else {
            // the resource was called on the root /comment/:id
            response.render( 200, [] );
        }

        // if this were a resource controller there would be a «resource»
        // property on the request. it would conatin the id / unique key
        // of the requested resource. log(request.resource) // 32432
    }
});

service

var   RESTService         = require('em-rest-service')
    , Class             = require('ee-class')
    , CommentCollection = require('CollectionController');


module.exports = new Class({
    inherits: RESTService


    , init: function init() {
        // you may load controllers from a direcotry or do the work yourself
        var commentsCollectionController = new CommentCollection();

        this.use('/user/:id/comment', commentsCollectionController);
        this.use('/comment', commentsCollectionController);

        // load controllers from a diretoy
        var options = {};
        options.controller = './controllers';
        options.controllerOptions = { anything: 'that', should: { be: 'passed' }, to: { the: 'controlers' } };

        init.parent(options);
    }
});

test.js / application

var   MyService        = require('MyService')
    , WebService     = require('ee-webservice');

// start the webservice
var service = new WebService({
    port: 80
});

// create an instance of my service implementation
var myService = new MyService();
myService.on('load', function(){
    service.listen();
});

// add myservice middleware to the webservice
service.use(myService);
npm loves you