open-api
Version:
An api framework that forces versioning, simplifies data validation, and automates documentation.
145 lines (115 loc) • 2.57 kB
Markdown
# 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
}));
```