api-sentinel

0.2.1 • Public • Published

api-sentinel

a JS layer between back-end and front-end

Info

It's a JS layer between back-end and front-end that converts private objects (from server) to public ones (for front-end) and vice-versa, using predefined schemas. For every entity that is transmitted to/from server, there are 2 files (descriptors) containing JSON schemas that describe it.

One is public (used by the front-end developers) and describes how the entity should be transmitted to server. It also contains validators.

The other is private (only the back-end developers should have access to it) and describes what part of the entity is public or not. It also maps fields to DB fields, and has decorators defined.

Example of public descriptor:

// file name: entities/test.js
const helpers = {
  parseTestArray: function testArray(item){
    return item.length > 2
  }
}
const model = {
  Text1: {
    _type: 'string',
    _mandatory: true,
    _validate: '.{6,}$',
  },
  Array1: {
    _type: 'array',
    _itemType: 'boolean',
    _validate: helpers.testArray,
  },
}
module.exports = model;

In this example:

Text1

  • has to be a string
  • it is mandatory
  • it has to validate against a regEx.

Array1

  • has to be an array
  • the items from array must be of type boolean
  • it is not mandatory (by default mandatory == false if missing - throws warning)
  • the array must validate against testArray function

Example or private descriptor:

// file name: entities-private/test.js
const helpers = {
  upperText: function(item){
    return item.toUpperCase();
  }
}
const model = {
  Text1: {
    _public: true,
    _decorator: helpers.upperText,
    _privateName: 'text1'
  },
  Array1: {
    _public: false,
    _privateName: 'array1'
  },
}
module.exports = model;

In this example:

Text1

  • is public (it is exposed to front-end)
  • it has a decorator
  • it's DB field is 'text1'

Array1

  • is public (it is exposed to front-end)
  • it's DB field is 'array1'

Usage examples

Example: prepare private object (from server) for front-end

let testPrivateObj = {text1: 'abcdef', array1: [true, false, false]}

let privateObj = new privateEntity('test', testPrivateObj);
// 'test' - entity name (the file name of the entity descriptor)

console.log(privateObj.makePublic());
// will print: {Text1: 'ABCDEF', Array1: [true, false, false]}

Example: prepare public object (received from front-end) for server manipulation

let testPublicObj = {Text1: 'abcdef', Array1: [true, false, false]}

let publicObj = new publicEntity('test', testPublicObj);
// 'test' - entity name (the file name of the entity descriptor)

console.log(publicEntity.makePrivate());
// will print: {text1: 'abcdef', array1: [true, false, false]}

License

This project is licensed under the MIT License - see the LICENSE file for details

Readme

Keywords

none

Package Sidebar

Install

npm i api-sentinel

Weekly Downloads

2

Version

0.2.1

License

ISC

Last publish

Collaborators

  • evozonjs