Skip to content
This repository has been archived by the owner on May 1, 2018. It is now read-only.
/ open-api Public archive

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

Notifications You must be signed in to change notification settings

mcwhittemore/open-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Open API

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

Versioning

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"]
});

Data Validation

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

Route Creation and Deprecation

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

Middleware run before a versions routes

ver.use(function(req, res, next){
    next();
});

Middleware run before version detection

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


About

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

Resources

Stars

Watchers

Forks

Packages

No packages published