Backend API validation and documentation framework.
npm install api-masterUses schema for:
* Validating API-methods parameter and result
* Generating API documentation (Warning: not implemented yet)
* Schema: Joi (could be converted to JSON-Schema over joi-to-json-schema)
* API-call parameter validation
* API-call result validation
* Errors:
* All valid API errors extracted to one place
* True type errors (inherits Error and ApiError)
* Contains statusCode
* Default error properties specification
* Custom error parameters
* api-master API:
Chaining for synchronous api. methods
* Potentially asynchronous api.call() returns promise
---
npm install api-master --save
`---
Run tests
`
npm install -g gulpcd node_modules/api-master/
gulp test
`Usage example
See example sources in node_modules/api-master/test/readme/
`
node node_modules/api-master/test/readme/use.js
`Define API Errors
api/errors.js
`js
module.exports = function(api) {
return api
.errType(500, 'SuperBackendError', function(err, data) {
err.message = 'Sorry guys but data is ' + data
})
.errType(500, 'PropsError', {message: 'msg', myInfo: 123})
.errType(500, 'SimpleError', 'Just a message')
// ...
}
`Define API Methods (End-Points)
api/methods.js
`js
var Joi = require('joi')module.exports = function(api) {
return api
.method('checkData', {
description: 'Checks given data', // Optional additional short description
param: Joi.object().required().keys({
data: Joi.bool().required().description('Data to check')
}),
result: Joi.string().required().description('Message about data'),
impl: function(param, helper) {
if(param.data == true) {
helper.resolve('Data is ok')
} else {
helper.reject('SuperBackendError', param.data) // Uses defined error type
}
}
})
// ...
}
`Use API
`js
// Define API
var api = require('api-master').makeApi('Super Backend')require('./api/methods')(api)
require('./api/errors')(api)
// Use API
var methodName = 'checkData'
function testCall(param) {
var callData = {} // optional call data: req, res, session, user
api.call(methodName, param, callData)
.then(function(result) {
console.log('Result:', result)
})
.catch(function(err) {
console.log('Catched:', err.stack)
})
.done()
}
testCall({data: true}) // Data is ok
testCall({data: false}) // SuperBackendError: Sorry guys but data is false
``