restormify
v1.0.1
Published
An automatic API generator for node-orm2 and restify
Downloads
17
Maintainers
Readme
REST-ORM-ify
A package designed to easily expose node-orm2 models as REST interface using node-restify. Requires the use of the restify.bodyParser
middleware.
The API will generate a HAL-compliant REST interface allowing for abitrary content association and better automation for interacting with objects.
This has been tested against:
"orm": "~2.1.17",
"restify": "~2.8.1",
Installation
npm i restormify
Usage
var restify = require('restify');
var orm = require('orm');
var restormify = require('restormify');
var server = restify.createServer();
server.use(restify.bodyParser());
orm.connect('some/db/string', function(err, db){
db.define('todo', {
task: String,
completed: Boolean,
deleted: {type: 'boolean', serverOnly: true},
hiddenValue: {type: text, serverOnly: true}
});
db.sync('models', function(){
restormify({
db: db,
server: server,
apiBase: 'api',
deletedColumn: 'deleted',
allowAccess: function(req, method, resourceName, resourceId){
return true;
}
}, function(err, relationsModel){
server.listen(3000);
});
});
});
This will expose todo
as /api/todo
responding to:
GET /api/todo
GET /api/todo/[id]
POST /api/todo
PUT /api/todo/[id]
PATCH /api/todo/[id]
DELETE /api/todo/[id]
> curl -X POST -H 'Content-type: application/json' -d '{"task": "Write tests", "completed": false}' myapi.com/api/todo
{
"id": 1,
"task": "Write tests",
"completed": false,
"_links": {
"self": {
"href": "/api/todo/1",
"type": "todo"
},
"associations": {
"href": "/api/todo/1/associations"
},
"associate": {
"href": "/api/todo/1/{associatioName}",
"templated": "true"
}
}
}
It will also allow you to associate content, and retrieve those associations, as well as information about the resource being retrieved.
curl -X POST -H 'Content-type: application/json' myapi.com/api/todo/1/assocate/todo -d '{"id": 1,"task": "Write tests","completed": false,"_links": {"self": {"href": "/api/todo/1","type": "todo"},"associations": {"href": "/api/todo/1/associations"},"associate": {"href": "/api/todo/1/{associatioName}","templated": "true"}}}'
{
todo: [
{
"id": 1,
"task": "Write tests",
"completed": false,
"_links": {
"self": {
"href": "/api/todo/1",
"type": "todo"
},
"associations": {
"href": "/api/todo/1/associations"
},
"associate": {
"href": "/api/todo/1/{associatioName}",
"templated": "true"
}
}
}
]
}
API
The default options are:
restormify(opts, callback)
opts
{
apiBase: 'api',
deletedColumn: 'deleted',
allowAccess: function(){
return true;
},
logger: server.logger
}
options.apiBase
: what all requests to your API will be prefixed with.
options.deletedColumn
: the name of the column to flag a piece of content as deleted. If set to false
it will destroy data in your database
options.allowAccess
: This method is called on each request. Returning false
will return 401: Not authorized
to the client. It is passed in the restify req
object, the name of the resource (and any ID), along with the HTTP method.
options.logger
: Specify a bunyan logger function to use. Defaults to default
(which uses the logger available from restify object), false
will disable logging.
callback(err, relationsModel)
When the system has finished initlizing it'll call this with the db instance to the relations table or an error if any.
Tests and Coverage
npm test
npm test-coverage
License
restormify is ©2014 Todd Kennedy. Available for use under the MIT License.