ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 148
Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 41
Abonament PDF

Vă prezentăm ironwingjs

Andrei Cacio
Web developer
@Evozon



PROGRAMARE

Pe scurt, ironwingjs este o librărie JavaScript lightweight şi framework-agnostic. Prin framework-agnostic înţelegem o librărie care nu depinde de un framework anume și se poate folosi fără nicio dependinţă în plus. Ironwing oferă manipulare de tip CRUD peste o interfaţă REST API pentru datele care vin de pe aceasta.

Totul a început de la simpla necesitate de a lucra cu datele care vin de pe un API. Aveam nevoie de o metodă destul de simplă și rapidă de a asimila acel API şi de a manipula datele într-o aplicaţie privată. În acel moment, nu intenționam să folosim un framework JavaScript anume deoarece doream să utilizăm strict partea de manipulare de date. Au fost câteva variante open-source, dar majoritatea aveau alte dependinţe şi era destul de complicat să le foloseşti stand-alone. Astfel, am început să scriem propria noastra variantă care să funcționeze exact așa cum ne doream. După ce s-a scris o primă versiune mai complexă, şi am observat că funcţionează exact cum ne-am aşteptat, ne-am gândit că poate ar ajuta şi alţi programatori. Aşa că ne-am hotărât să publicăm o versiune mai finisată sub forma unei librării open-source. Aşa a luat naştere ironwingjs.

Ironwing este scrisă conform noilor standarde EcmaScript şi se foloseşte de unele implementări populare precum promises. Totodată, această librarie este construită pe baza a câteva concepte precum: adapters, storage, proxy objects. Aceste concepte abstracte au fost gândite astfel ca ironwing să fie uşor extensibil şi practic. Mai mult decât atât, această librarie a fost concepută să fie uşor de folosit în orice aplicaţie şi ușor de adaptat în orice framework. Ideea de bază este simplitatea.

Instalare

Ironwing poate fi instalat folosind una din următoarele metode afişate mai jos:

$ npm install ironwing
# sau
$ bower install ironwing

În caz că se utilizează sistemul de operare Windows, aceste comenzi pot fi rulate în cadrul consolei git-bash.

Cum funţionează

Adapters

Un adapter este un obiect scris dupa o interfaţă prestabilită pentru putea fi integrat cu ironwing. Out of the box, ironwing este livrat cu un adaptor pentru comunicarea cu serverul prin AJAX. Practic acest adaptor este o interfaţă intermediară pentru comunicarea cu API-ul oferit de browser, numit . Acest API oferă o metodă asincronă de comunicare cu serverul prin request-uri HTTP de tip JSON. Programatorul nu interacţionează cu adaptorii în mod direct. Aceştia sunt folosiţi under the hood de core-ul ironwing. Scopul adaptorilor sunt de a abstractiza comunicarea cu serverul astfel încât procesul să devină uşor de modificat. Oricine poate să scrie propriul său adaptor. Încărcarea unui adapter se face folosind metoda  astfel:

import ironwing from 'ironwing';
ironwing.useAdapter('JSON', ['/api']);  

Această bucată de cod setează librăria ironwing să foloseasca requesturi de tip JSON pentru toate operaţiile cu serverul. Acest tip de adaptor are nevoie de un singur parametru, şi anume calea către API.

Storage

Prin default, ironwing foloseşte un storage local (heap). După ce libraria aduce de la server una sau mai multe resurse, aceasta le stochează folosind interfaţa storage-ului pentru a putea fi folosite in viitor. Se poate spune că ironwing cache-uieşte resursele. Spre exemplu, dacă ar fi să aducem o resursă folosind următoarea cale de la API: /users/100 vom proceda astfel:

ironwing('users', 100).then((user) => { 
    console.log(user.attr.name); 
});  

iar dacă dorim să ne folosim de această resursă în altă parte a aplicaţiei, putem avea acces la ea folosind următoarea metodă:

var userModel =  ironwing.storage.find('users', 100);  

sau dacă dorim să avem acces la intreaga colecţie de tip users:

ironwing('users',).then((users) => { 
    console.log(users.length); 
});
var usersCollection =  ironwing.storage.findAll('users');

În următoarea vearsiune se doreşte implementarea unui sistem de folosire a mai multor implementări de tip storage. Un exemplu bun ar fi o implementare de storage ce se foloseşte de local storage din browser.

Proxy objects

Metoda  este de fapt un factory method care returnează instanţe de tip Model. Fiecare instanţă expune metode CRUD pentru manipularea resursei mapped pe API. Mai mult, ironwing nu modifică în mod direct obiectul deserializat din JSON. Librăria expune un obiect numit proxy care este de fapt intermediarul. Acest obiect poate fi accesat prin cheia . Mai mult decât atât, acest obiect este de fapt o transformare camel cased a denumirilor atributelor originale. Acest format este de preferat să fie folosit în aplicaţiile JavaScript de accea ironwing transformă automat orice combinaţie (pascal case, uppercase etc.) în formatul camel case. Orice modificare pe obiectul proxy este automat sincronizată cu obiectul original înainte să fie transmis serverului sub forma serializată. Această tehnică ne permite să avem un control mult mai mare asupra cum este modificat obiectul original.

Exemplu de folosinţă

import ironwing from 'ironwing';
var userData = {
    first_name: 'Jon',
    last_name: 'Doe';
};
ironwing.useAdapter('JSON', ['/api']);
ironwing.create('users', userData).then((userModel) => {
    /**
    * a POST request is sent to the server
    * /api/users
    */
    userModel.attr.firstName = 'Jon';
    userModel.attr.lastName = 'Doe';
    userModel.update().then(() => {
        /**
        * a PUT request is sent to the server
        * /api/users/:id
        */
    });
});  

Concluzie

Ironwing este o librărie care poate fi uşor "conectată" la un RESTful API iar programatorul are direct acces la o manipulare CRUD asupra resurselor sale. Noi am decis să publicăm această librarie publicului larg cu speranţa că poate va ajuta pe altcineva la momentul oportun. Deoarece este open source, oricine poate contribui, să raporteze probleme sau pur şi simplu să vina cu idei noi legate de cum ar dori să funcţioneze ironwing. Ironwing este o viziune diferită de a rezolva o necesitate de care depindem cu toţii. Scopul şi esenţa librăriei este de a fi cât mai uşor de folosit și cât mai uşor extensibilă.

Disclaimer

Ironwing a fost dezvoltat inițial pentru proiectul Trubzi în cadrul Evozon Systems din Cluj-Napoca. Evozon este o companie de software fondată în 2005 de catre Gabriel Cretu si Robert Masic, cu clienți de pe toate continentele. Evozon dezvoltă atât aplicații la cerere cât și produse proprii precum Trubzi, Calendis, Hoteliqo și framework-uri folosite de către dezvoltatori din lumea întreagă, precum Essence și Crux. 

Conferință TSM

NUMĂRUL 147 - Automotive

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects

Andrei Cacio a mai scris