dorante

stub an API from a JSON schema

dorante

Dorante accepts a JSON schema and provides a stub API server based on it.

npm install dorante --save

Dorante will start a stub API server when you give it a JSON schema. You can then make requests to that server, and Dorante will do its best to act like a real version of the API that the schema represents.

var Dorante = require('dorante');
var get     = require('request').get;
var dorante;
 
get('https://api.example.com/schema', function(errresponsebody) {
  var schema = JSON.parse(body);
  dorante = new Dorante(schema);
 
  dorante.startServer(3000).then(function() {
    var port = dorante.server.address().port;
    console.log('dorante is listening on port ' + port);
  });
});

Certain endpoints for the API can also be stubbed:

var appResponse = dorante.factory('app', { name: 'foo-bar'});
dorante.stub('GET', '/apps', [appResponse], 200);

And unstubbed:

dorante.unstub('GET', '/apps');
 
// or... 
 
dorante.unstubAll();

Dorante can build factories from your JSON schema:

dorante.factory('account');
 
// { 
//   created_at: '2012-01-01T12:00:00Z', 
//   name      : 'example-user' 
// } 
 
dorante.factory('account', { name: 'custom-app-name' });
 
// { 
//   created_at: '2012-01-01T12:00:00Z', 
//   name      : 'custom-user-name' 
// } 

It'll also extend nested properties:

dorante.factory('app');
 
// { 
//   created_at: '2012-01-01T12:00:00Z', 
//   name      : 'example-app', 
//   owner     : { 
//     created_at: '2012-01-01T12:00:00Z', 
//     name      : 'example-user' 
//   } 
// } 
 
dorante.factory('app', { name: 'custom-app', { user: name: 'custom-user' } });
 
// { 
//   created_at: '2012-01-01T12:00:00Z', 
//   name      : 'custom-app', 
//   owner     : { 
//     created_at: '2012-01-01T12:00:00Z', 
//     name      : 'custom-user' 
//   } 
// }