open-api

An api framework that forces versioning, simplifies data validation, and automates documentation.

Open API

An API server that forces versioning, simplifies deprecation, and automates documentation and data validation.

var v1 = api.version({
    name:"something-for-a-url",
    envs:["list", "of", "envs", "this", "is", "active", "for"]
});
 
var v2 = api.version({
    name:"v2",
    envs:["development"]
});
v1.addValidator(
    "data-validator-name",
    "desc for docs",
    function(value){ 
        return value=="is valid";
    }
);
 
v1.addValidator(
    "data-validator-with file stream",
    fs.createReadStream("path/to/file.md", {encoding:"utf8"}),
    function(value){ 
        return value=="is valid";
    }
);
var opts = {
    validate: {
        request: "data-validator-name",
        response: "data-validator-name"
    },
    desc: "Some explanation for the docs"
}
 
v1.get("route-path", opts, function(req, res){
    res.json({"the":"payload"});
});
 
v2.get("route-path", {discontinued:true});
ver.use(function(req, res, next){
    next();
});
api.before(function(req, res, next){
    req.user = "Robert Frost";
    next();
});
 
## Example App.js
 

var openApi = require("../../"); var api = openApi();

//create a version of your api var v1 = api.version({ name: "v1", envs: ["development", "staging", "production"] });

//add an endpoint v1.get("foo", { validate: { request: "empty", response: "object" }, desc: "Returns the message foo" }, function(req, res) { res.json({"message":"foo"}); });

//create another version var v2 = api.version({ name: "v2", envs: ["development", "staging"] });

//add another endpoint v2.get("bar", { validate: { request: "empty", response: "object" }, desc: "Returns the message bar" }, function(req, res) { res.json({"message":"bar"}); });

//create a thrid version! var v3 = api.version({ name: "v3", envs: ["development"] });

//remove an endpoint v3.get("foo", {discontinued:true});

var http = require("http"); http.createServer(api).listen(3000);

 
## Baked In Middleware
 
### Tracking
 

var openApi = require("open-api"); var api = openApi(); api.before(openApi.middleware.tracking(function(req, res){ console.log("REQUEST TO TRACK", req.trackId); }, function(req, res){ console.log("REPONSE TO TRACK", req.trackId); }, function(req){ //to track or not to track //return ture or false return req.url.match(/^/$|^/docs/) == null; //default }));