EONC
![Test Coverage](https://img.shields.io/coveralls/panates/eonc/master.svg)
EONC is a fast Rest-Application framework for NodeJS, makes building rest applications easy.
EONC framework supports endpoints (known as api's), types, global schemas and express/connect middlewares.
const eonc = require('./');
const http = require('http');
const app = eonc.server();
const compression = require('compression');
app.use(compression());
const cookieSession = require('cookie-session');
app.use(cookieSession({
keys: ['secret1', 'secret2']
}));
const ep = new eonc.Endpoint();
ep.GET({
id: "long",
name: {
type: "string",
minSize: 3,
maxSize: 15,
onvalidate: function (type, inp) {
return inp + " validated";
}
},
date: "date?",
obj: {
type: "object",
optional: true,
minOccurs: 0,
maxOccurs: 0,
items: {
a: "integer",
b: "number?",
c: "string"
}
}
},
function (req, res) {
res.end(JSON.stringify(req.args));
});
ep.PUT("id:long; name:string(3-15); date:date?", function (req, res) {
res.end(JSON.stringify(req.args));
});
app.use('/app/ping', ep);
http.createServer(app).listen(5000);
Getting Started
EONC is a extensible framework that supports both middleware and endpoint.
Install EONC
$ npm install eonc
Create an app
The main component is a EONC "app". This will store all the middleware and endpoint
added and is, itself, a function.
const app = eonc.server();
Create endpoints
Endpoints are the api's in your rest application. An endpoint can handle one, many or all http methods. EONC process type checking and converting for input parameters before calling endpoint handler.
let ep = new eonc.Endpoint();
ep.GET("id:long", function (req, res) {
res.end("Your id is " + req.args.id);
});
ep.PUT("id:long; name:string(3-15)", function (req, res) {
res.end("Your name updated with " + req.args.name);
});
ep.DELETE("id:long", function (req, res) {
res.end("Your id is delete");
});
app.use("/path/to/api1", ep);
ep = new eonc.Endpoint();
ep.ALL("foo:string", function (req, res) {
res.end(req.attr.foo);
});
app.use("/path/to/api2", ep);
Use types
Type checking and conversion is the powerful part of the EONC framework. It quaranties you will get the exact type of request parameters in your endpoint handler. Defining types is very easy.
1.Type definition objects
ep.GET(
{
field1: {
type: "integer",
optional: true,
minValue: 1,
maxValue: 100,
minOccurs: 0,
maxOccurs: 10,
onvalidate: function (type, inp) {
return inp;
}
},
field2: {
type: "string",
minSize: 3,
maxSize: 15,
pattern: /^\w+$/
},
date: "date?",
obj: {
type: "object",
optional: true,
items: {
a: "integer",
b: "number?",
c: "string"
}
}
},
handler);
2.Type definition strings
ep.GET(
{
field1: "integer",
field2: "integer[]",
field3: "integer?[1-10]",
field4: "integer(1-100)",
field5: "integer?(1-100)[1-10]",
field6: "string?(3-15)/\w+/",
},
handler);
Use global schemas
Global schemas can be used in an EONC application. This helps you define global types and use them in your endpoints.
let schema1 = new eonc.Schema("ns1:http://app1.anyurl.com");
schema1.define("ID", "number");
schema1.define("Name", "string(3-30)");
let schema2 = new eonc.Schema("ns2:http://app2.anyurl.com");
schema2.define("CustomType", {
type: "object",
items: {
a: "number",
b: "string",
c: "date?"
}
});
Once you created a schema object and define types in it, you can use that types anywhere in your application.
let ep = new eonc.Endpoint();
ep.GET("id:ns1:ID; name:ns1:Name; data:ns2:CustomType", handler);
Use middleware
The core of middleware support is extended from connect project. Take a look at connect repository for detailed use of middlewares.
Node Compatibility
License
MIT