Code Monkey home page Code Monkey logo

restormify's Introduction

build status

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.

restormify's People

Contributors

toddself avatar

Watchers

Zo-Hasina Rasatavohary avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.