rest-req-res

REST API helper, json and xml format, cors, methods override


Keywords
rest, api, cors, json, xml
License
ISC
Install
npm install rest-req-res@1.2.11

Documentation

REST Request Response

REST API helper, json and xml format, cors, methods override

npm package

Installing

Installing of NPM package

npm install rest-req-res

How to use

Beginning

var express = require('express');
var app = express();
var router = express.Router();
var config = require('./config.json');
var rest = require('rest-req-res');
config.errors = require('./errors.json');
app.set('config', config);
rest(app);

Success response

router.get('/success', function(req, res){
  res.success({
    resultField1: 'value1',
    resultField2: 'value2'
  }, 200, {
    metaField1: 'value1',
    metaField2: 'value2'
  });
});

Error response

router.get('/error', function(req, res) {
  res.error('CONFLICT', {
    details1: 'value1',
    details2: 'value2'
  });
});

Mounting

app.use('/'+config.api.version, router);
app.listen(config.app.port, config.app.host);

Config example ./config.json

{
  "app": {
    "port": 8080,
    "host": "127.0.0.1"
  },
  "api": {
    "version": "v1",
    "origin": ["Test", null]
  },
  "cors": {
    "maxAge": 86400,
    "allowHeaders": [
      "Content-Type", "Accept", "Origin", "X-HTTP-Method-Override", "User-Agent", "Authorization",
      "Cache-Control", "Keep-Alive", "X-Requested-With", "If-Modified-Since"
    ],
    "allowMethods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"]
  }
}

Errors example ./errors.json

{
  "BAD_REQUEST": {"code": 400, "status": 400, "message": "Bad Request"},
  "UNAUTHORIZED": {"code": 401, "status": 401, "message": "Unauthorized"},
  "FORBIDDEN": {"code": 403, "status": 403, "message": "Forbidden"},
  "NOT_FOUND": {"code": 404, "status": 404, "message": "Not Found"},
  "METHOD_NOT_ALLOWED": {"code": 405, "status": 405, "message": "Method Not Allowed"},
  "REQUEST_TIMEOUT": {"code": 408, "status": 408, "message": "Request Timeout"},
  "CONFLICT": {"code": 409, "status": 409, "message": "Conflict"},
  "INTERNAL_SERVER_ERROR": {"code": 500, "status": 500, "message": "Internal Server Error"},
  "SERVICE_UNAVAILABLE": {"code": 503, "status": 503, "message": "Service Unavailable"},
  "UNKNOWN_ERROR": {"code": 520, "status": 520, "message": "Unknown Error"}
}

Method Override

Request headers

X-HTTP-Method: PUT
X-HTTP-Method-Override: PUT
X-Method-Override: PUT

URL query parameter

?httpMethod=put

If POST http://url?httpMethod=put then handle as PUT http://url

Request Content-Type header

Supported Content-Type

Content-Type: application/xml
Content-Type: application/json

If Content-Type: application/xml and body

<?xml version="1.0" encoding="UTF-8"?><test>1</test>

then server will parse request body as

{
  "test": "1"
}

Request Accept header

Supported Accept

Accept: application/xml
Accept: application/json

URL query parameter

?responseFormat=xml
?responseFormat=json

Response status code

URL query parameter

?forcedResponseStatus=200

Development

Run tests

npm run test

Run watch files and autostart test

npm run watch

License

ISC