Introducing IronwingJS

Andrei Cacio

Web developer @ Evozon Systems

http://andrei-cacio.github.io/ironwing

How it all started

  • we wanted something easy to use
  • framework agnostic
  • it should do only data manipulation
  • we didn't know how the project will evolve

How we wanted it to work?

GET  ->       /users

GET  ->       /users/:id

POST ->      /users

PUT ->        /users/:id

DELETE -> /users/:id

JSON API

Server

Client

?

Let's generalize the problem

  • we want some sort of model
  • we want to manipulate data
  • we want a representation of the data
  • we want something extensible
  • we want.... a genreal solution

Introducing IronwingJS

GET  ->       /users

GET  ->       /users/:id

POST ->      /users

PUT ->        /users/:id

DELETE -> /users/:id

JSON API

Server

Client

ironwingjs

.get()

.create()

.update()

.delete()

Cool features

  • adapters
  • proxy objects
  • storage

Adapters

/**
 * all API calls will being with /api
 */
ironwing.useAdapter('JSON', ['api']);

/**
 * GET Users collection
 * GET -> /api/users
 */
ironwing('users').then((users) => {
    console.log(users.length);
});
  • extensible
  • abstract layer over transport

Proxy objects

ironwing('users', 1).then((user) => {
    console.log('My name is ', user.attr.firstName);
});
// My name is John
// /api/users/1
{
    "first_name": "John",
    "last_name": "Doe"
}

JSON API

ironwing model representation

  • preprocess data
  • filter modifications

Storage

ironwing('users', 1).then((user) => {
    user.attr.firstName = 'Oliver';
    user.update();
});

edit-user.js

let user = ironwing.storage.find('users', 1);

export default function render() {
    document
        .getElementById('user-firstname')
        .text(user.attr.firstName);
}

user-firstname-component.js

  • stores all models
  • everything done on the model is mirrored on the storage
  • highly extensible

To sum up

  • it's open-source!
  • it's easy to use
  • there is still work to be done
  • anyone can contribute  

Thank you!

 

 

Questions?