circle

Minimalistic JSON API Server

circle

Minimalistic NodeJS API Server.

$ npm install circle
circle = require('circle')
 
api = circle({
  '/person/:name/:surname': person,
  '/company/:id': company,
  '/': home
})
 
api.start(8080, 'localhost')

Accepting requests to URLs like /person/john/smith?email=john@smith.com

function person (replymatch) {
  reply(undefined, { name: match.params.name, surname: match.params.surname, email: match.params.query.email })
}

This will output:

{
        "ok": true,
        "result": [
                {
                        "name": "john",
                        "surname": "smith",
                        "email": "john@smith.com"
                }
        ]
}

Producing errors:

function company (reply, match) {
  reply({ not_implemented: true }) // returns error
}

It handles POST data and file uploads nicely:

function create (replymatchpostfiles) {
  match.params
  // => { name: 'foo', age: 21 } 
 
  files
  // => { profilePicture: { path: '/tmp/foo.tar.gz', size: 1024 }} 
 
  reply (undefined, { created: true })
}

Circle outputs the response in JSONP format for requests made by passing "callback" parameter.

Circle servers will output JSON by default. To format the output for specific "Accept" header:

api.format('/person/:name/:surname', 'text/plain', function (contextmatch) {
  return {
    contentType: 'text/plain',
    response: 'Name: ' + context.result.name + ' Surname: ' + context.result.surname
  };
});

Will output below for curl http://localhost:8080/person/john/smith?email=john@smith.com:

Name: John
Surname: Smith
Email: john@smith.com