Skip to content

evozonjs/api-sentinel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

JS layer between back-end and front-end

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published