RESTful Service Middleware library
JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
.gitignore
.travis.yml
LICENCE
README.md
index.js
package.json
test.js

README.md

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