Platforma Pentru Gestionarea Evenimentelor cu Transmitere Securizata

Capitolul I. Introducere

Tema acestui proiect de diplomă îl reprezintă realizarea unei platforme web pentru gestionarea evenimentelor însoțită de o aplicație mobilă pentru vizualizarea acestor evenimente.

Principalul obiectiv imediat al platformei este acela de a oferi o metodă alternativă de promovare a locațiilor de divertisment și de interes din cadrul unei regiuni geografice.

Printr-o perspectivă care acoperă o mare varietate de categorii de locații importante, platforma își propune să înlocuiască în timp nevoia de a realiza aplicații web dedicate, aceasta constituind principala modalitate de promovare utilizată de proprietarii acestor afaceri. Platforma permite promovarea în prealabil a evenimentelor corespunzătoare unei locații precum și adăugarea unor galerii descriptive pentru evenimentele anterioare.

În timp ce accentul cade pe promovare la o scară cât mai largă, platforma este complementată de o aplicație mobilă dedicată, axată mai mult pe utilizator și nevoile acestuia.

Aplicația mobilă permite accesul unificat la o listă de locații și evenimente viitoare din cadrul unei zone geografice. În cadrul aplicației un utilizator poate să găsească foarte rapid un punct de interes și informațiile suplimentare atașate acestuia.

Astfel se pot afla datele de contact pentru obținerea unei rezervări, adresa unei locației, data susținerii unui eveniment, precum și alte informații relevante și actuale. Utilizatorul poate obține aceste informații folosind dispozitivul mobil aflat tot timpul la îndemână, fără să fie nevoie de apelul la alte surse, cum ar fi folosirea unui motor de căutare care poate oferi referințe depășite sau chiar greșite.

Pentru utilizatorii care se află într-o postură în care nu au cunoștințe referitoare la zona geografică în care se află, aplicație își propune să înlocuiască și nevoia unor sistem de navigare GPS pentru a ajunge la o anumită locație. La cererea utilizatorului, aplicația trasează constant o rută optimă către destinație pornind de la locația curentă. Astfel clientul este scutit de procesul relative complex de sincronizare a locației curente și de adăugare a adresei destinație într-un sistem de navigare dedicat.

Totodată, platforma și aplicația complementară își propun să demonstreze viabilitatea tehnologiilor și platformelor de dezvoltare moderne în obținerea unui sistem complex și performant, alcătuit din componente care utilizează date dinamice ce interacționează în mod securizat.

Capitolul II. Tehnologii utilizate

Limbajelor și mediilor de dezvoltare alese pentru elaborarea acestui proiect reprezintă o consecință directă a faptului că aplicația este compusă din două mari componente:

O componentă care rulează pe un server și prezintă o interfață accesibilă doar unei anumite categorii de clienți

O implementare care rulează pe dispozitive independente( terminale Android ) care este accesibilă tuturor clienților

Acest lucru a condus la implementări care se bazează pe un subset de limbaje diferite pentru a putea profita de beneficiile dezvoltării native pentru fiecare tip de sistem. Astfel procesul de dezvoltare s-a axat în jurul limbajelor PHP (pentru aplicația server) și JAVA ( pentru aplicația client).

II.1. Tehnologii utilizate la nivelul de aplicației server

PHP (acronim recursiv pentru PHP: Hypertext Preprocessor) este un limbaj de scripting de uz general, cu cod-sursă deschis, utilizat pe scară largă, și care este potrivit în special pentru dezvoltarea aplicațiilor web și poate fi integrat în HTML.

PHP este o tehnologie pe partea de server, inter-platformă. Sintagma „pe parte de platformă” se referă la faptul că acțiunile unui script PHP sunt executate pe server, respectiv nu pe dispozitivul pe care rulează navigatorul web al utilizatorului ce vizitează site-ul Web. Natura inter-platformă a limbajului înseamnă că PHP rulează pe majoritatea sistemelor de operare, inclusiv pe Windows, Unix și Macintosh. PHP oferă performanțe excelente, integrare strânsă cu aproape orice bază de date existentă, stabilitate, portabilitate și un set aproape nelimitat de funcții, datorită extensiilor disponibile.

Versiunea cu numărul 5 a limbajului PHP, utilizată aici în cadrul procesul de implementare, reprezintă o dezvoltare majoră a acestui limbaj popular; una dintre modificările majore aduse se referă la programarea orientată pe obiecte.

Programarea orientată pe obiecte este o paradigmă de programare, axată pe ideea încapsulării, adică gruparea datelor și a codului care operează asupra lor, într-o singură structură. Un alt concept important asociat programării orientate obiect este polimorfismul, care facilitează abstractizări ce permit o descriere conceptuală mai simplă a soluției.

Interfațarea relativ simplă cu bazele de date alături de avantajele programării orientate pe obiecte și disponibilitatea inter-platformă reprezintă principalele motive pentru alegerea acestui limbaj ca bază pentru implementarea variantei server a aplicației.

MySQL este un sistem de gestionare a bazelor de date (DBMS – Database Management System) pentru baze de date relaționale(RDBMS – Relational Database Management System), produs de compania suedeza MySQL AB și distribuit sub Licența Publică Generală GNU. Este cel mai popular și argumentabil, cel mai bun sistem de gestiune a bazelor de date cu sursă deschisă la ora actuală, fiind o componentă cheie a stivei LAMP (Linux, Apache, MySQL, PHP).

În cadrul proiectului, MySQL versiunea 5 este utilizat pentru manipularea și stocarea datelor iar pentru interacțiunea la nivel de interfață s-a utilizat phpMyAdmin, un sistem de gestiune a bazelor de date, liber, destinat administrării bazelor de date prin intermediul unui navigator Web.

În timp ce PHP și MySQL sunt folosite pentru operațiunile care sunt transparente utilizatorului, pentru construcția interfeței și prezentarea informațiilor s-au utilizat HTML, CSS și JavaScript.

HTML (HyperText Markup Language) este un limbaj de marcare folosit de navigatoarele Web pentru a determina modul de afișare a conținutului paginilor Web. Elemente de bază ale HTML sunt o serie de câmpuri sau marcaje speciale, numite și tag-uri sau etichete HTML. O altă caracteristică esențială a HTML o constituie posibilitatea realizării de legături (link-uri sau hyperlink-uri) spre alte documente/pagini Web.

La momentul scrierii acestei lucrări, standardul HTML se află la a cincea sa revizuire. HTML5 aduce numeroase modificări la nivel sintactic prin introducerea de elemente noi( printre care <header>, <nav>, <section>, <article>, <nav>, <footer> ) sau prin alterarea unor elemente existente( <a>, <cite>, <meniu> ). În cadrul proiectului, s-a urmărit conformarea cu specificațiile HTML5 și evitarea elementelor depreciate pentru a asigura o funcționare în parametri normali pentru o perioada cât mai îndelungată.

Deși limbajul HTML stă la baza construcției interfețelor web, modificările care pot fi aduse aspectului acestor interfețe, în cadrul limbajului, sunt limitate.

Limbajul CSS este utilizat pentru îmbunătățirea prezentării paginilor Web. CSS este un acronim pentru Cascading Style Sheets( foi de stil în cascadă ). Acest limbaj are rolul unui instrument avansat destinat proiectării unor site-uri Web profesionale care nu pot fi construite folosind atribute HTML obișnuite.

Ultimul standard al limbajului (CSS3) a fost utilizat pentru dezvoltarea proiectului întrucât această revizie introduce și extinde funcționalitatea a numeroase stiluri (animații, borduri, efecte) care s-au dovedit a fi esențiale pentru construcția interfeței aplicației.

JavaScript este un limbaj de programare orientat obiect bazat pe conceptul prototipurilor, utilizat de programatorii de aplicații Web pentru a construi pagini Web dinamice. Utilitatea acestui limbaj este vizibilă în special la interfețele aplicațiilor web unde pot fi create noi funcționalități printre care: crearea de formulare interactive, validarea informațiilor, răspunsul la diverse evenimente.

JSON este un format de reprezentare a datelor și de interschimbare a acestora între aplicații informatice. Numele de JSON este un acronim pentru JavaScript Object Notation. Este un format text, inteligibil pentru oameni, utilizat pentru reprezentarea obiectelor și a altor structuri de date și este folosit în special pentru a transmite date structurate prin rețea printr-un proces numit serializare. Un avantaj al acestui format îl reprezintă faptul că există implementări ale procesului de serializare și deserializare în aproape orice limbaj de nivel înalt. Astfel poate fi folosit pentru vehicularea datelor între aplicații care folosesc limbaje diferite și are o reprezentare mai simplificată decât principalul concurent: limbajul XML.

Aplicația server este construită peste mediul de dezvoltare Laravel. Laravel este o platformă PHP în continuă dezvoltare care se axează pe un model arhitectural de tip Model-View-Controller (MVC). Laravel are numeroase funcționalități care-l transformă într-un framework extrem de puternic cum ar fi prezența fațadelor(Facades), un sistem ORM( Object-relational mapping) și centralizarea rutelor posibile( fișierul routes.php).Spre deosebire de celelalte alternative la categoria de platforme PHP( Joomla, WordPress), Laravel este foarte bine optimizat, rapid, ușor de extins și nu este îngreunat de prezența unei interfețe de administrare.

Avantajele structurii MVC depin aparente imediat într-o aplicație cu un cod complex. Fiecare dintre elementele componente are un rol bine definit. Astfel modelul( Model ) manipulează operațiunile logice și cele de utilizare ale informației. Componenta „viziune”( View ) devine reprezentarea grafică, cu alte cuvinte, exprimarea ultimei forme a datelor. Controlatorul (Contrller) trebuie să fie capabil de a manipula fișiere, clase, metode, funcții.

Laravel extinde conceptul de controller permițând construirea de controlatoare RESTful în jurul unor resurse. Posibilitatea de organizare simplă a codului alături de ușurința de manipula datele și rutele reprezintă motivația alegerii acestei platforme ca bază pentru proiectul dezvoltat.

Interfața cu utilizatorul a fost construită pornind de la stilurile și funcționalitatea oferită de Bootstrap, o platformă CSS dezvoltată inițial de Twitter. Ajunsă la versiunea cu numărul 3, platforma permite dezvoltarea de site-uri dinamice care se adaptează la rezoluția dispozitivului. Librăria vine însoțită de un fișier JavaScript și astfel poate oferi o gamă largă de funcționalități, de la simple efecte și meniuri pană la elemente grafice elaborate bazate pe caractere tipografice.

Utilizarea acestei platforme în cadrul proiectului se datorează necesității consistenței interfeței în diversele combinații posibile de dispozitive/navigatoare web și posibilităților aproape nelimitate de extindere a componentelor existente.

JQuery este o librărie rapidă și robustă construită peste limbajul JavaScript. Librăria își propune să simplifice, sa extindă și să adauge funcționalități noi limbajului părinte. Traversarea și modificarea documentelor a devenit astfel o rutină trivială iar manipularea evenimentelor, animațiilor și citirea fișierelor au ajuns să fie standardizate în marea majoritatea navigatoarelor web prin introducerea unui sistem API ușor de învățat și utilizat. Printr-o combinație de versatilitate și capabilitate de extindere, jQuery a schimbat modul în care programatorii abordează dezvoltarea de cod JavaScript. Acest lucru devine evident și în cadrul proiectului, unde, librăria JQuery reprezintă punctul de pornire pentru întregul cod JavaScript creat.

II.2. Tehnologii utilizate la nivelul aplicației client

Aplicația client a fost concepută pentru a rula pe terminale Android și ca atare, utilizează un alt subset de limbaje de programare decât aplicația server.

Java este un limbaj de programare complete, orientat-obiect, dezvoltat și comercializat de Sun Microsystems. Prin intermediul limbajului Java, descendent al familiei de limbaje de programare C și C++, programatorii pot crea diverse aplicații și pot controla funcționarea diverselor aparate electronice. Spre deosebire de alte limbaje, Java oferă promisiunea compatibilității inter-platformă.

Utilizarea acestui limbaj de programare pentru dezvoltarea aplicației client se justifică prin faptul că sistemul de operare Android permite dezvoltarea de aplicații native doar în limbajul Java. S-a ales această opțiune în detrimentul altor limbaje sau platforme datorită cerințelor de performanță; aplicația vehiculează în orice moment un număr mare de imagini, conexiuni către server și fire de execuție în paralel.

Un alt limbaj care stă la temelia dezvoltării aplicațiilor pe sistemul de operare Android este XML. XML reprezintă un acronim pentru Extensible Markup Language și este un meta-limbaj de marcare, un model de stocare a datelor nestructurate și semi-structurate. În cadrul dezvoltării aplicației pe Android, acest limbaj a fost utilizat pentru a îndeplini mai multe scopuri, printre care cele mai semnificative sunt:

descrierea interfeței și a elementelor componente

descrierea componentelor lingvistice pentru fiecare limbă utilizată

compunerea animațiilor și proiectarea elementelor customizate

definirea culorilor, dimensiunilor, stilurilor

definirea variabilelor utilizate de sistemele API atașate

Capitolul III. Securitatea datelor

Odată cu răspândirea sistemelor distribuite si a Web-ului, necesitatea securizării acestora a devenit tot mai mare. Protocolul SSL a apărut ca răspuns la aceasta cerință. Deși SSL nu este singurul protocol de acest gen, este totuși unul din cele mai răspândite si des utilizate de site-urile care operează diverse tranzacții (financiare, bancare) care conțin date secrete si/sau importante (parole, informații personale, informații financiare, etc).

Sistemele distribuite au numeroase avantaje printre care se numără și facilitatea schimbului de informații, partajarea resurselor scumpe, fiabilitatea mărita in funcționare, creșterea performanței prin paralelizarea calcului. Totuși, aceste sisteme au si dezavantaje iar unul din cele mai mari dezavantaje e securitatea lor. Principalele soluții de securitate pentru informațiile din Internet sunt:

la nivel de rețea: s-a dezvoltat o arhitectura de securitate la nivel de IP si la nivel de protocolul TCP/IP (Transmision Control Protocol/ Internet Protocol);

la nivel de sesiune: se folosește deseori protocolul SSL (Secure Sockets Layer), care oferă servicii de securitate chiar deasupra nivelului TCP, folosind chei publicei secrete, astfel încât sa asigure confidențialitatea, integritatea si autenticitatea clientului sau serverului din sistem.

Unul din cele mai folosite protocoale la nivel de sesiune este SSL (Secure Sockets Layer).

III.1. Securizarea comunicației folosind SSL și TLS

Secure Sockets Layer (SSL) și Transport Layer Security (TLS), succesorul său, sunt protocoale criptografice care permit comunicații sigure pe Internet. Între SSL 3.0 și TLS 1.0 există anumite diferențe, dar protocolul rămâne aproximativ același.

SSL (Secure Sockets Layer) este un acronim care reprezintă un protocol web dezvoltat de compania Netscape pentru a transmite fără risc documente private prin Internet.

Pentru a cripta datele, SSL utilizează un sistem criptografic cu două chei: una publică, cunoscută de oricine, și una privată, secretă, cunoscută numai de destinatarul mesajului. Majoritatea navigatoarelor web suportă SSL, și multe site-uri web utilizează protocolul de utilizator pentru a transmite informații confidențiale, cum ar fi numerele de carduri de credit.

Prin convenție, adrese URL care au nevoie de o conexiune SSL încep cu prefixul https: (în loc de http:).

Un alt protocol de transmitere a datelor în siguranță pe World Wide Web este Secure HTTP (S-HTTP). În timp ce SSL creează o conexiune securizată între un client și un server prin care poate fi trimisă în siguranță orice cantitate de date, S-HTTP este proiectat pentru a transmite mesaje individuale în siguranță. SSL și S-HTTP pot fi așadar percepute mai degrabă ca tehnologii complementare decât concurente. Ambele protocoale au fost aprobate ca standard de către Internet Engineering Task Force (IETF).

În utilizările uzuale, numai serverul este autentificat (identitatea sa este certificată), în timp ce clientul rămâne neautentificat; autentificarea mutuală presupune existența unei mecanism de distribuție a cheilor publice („PKI”) către clienți.

SSL implică mai multe faze intermediare:

Verificarea mutuală de suportare a protocolului

Schimbarea cheilor prin intermediul criptării prin metoda cu chei publice și autentificare pe bază de certificate

Transmiterea de trafic criptat prin sistemul cheilor simetrice

În timpul primei faze a protocolului serverul și clientul negociază asupra algoritmului de criptare ce va fi folosit. Implementările curente permit următoarele posibilități:

criptografia bazată pe chei publice: RSA, Diffie-Hellman, DSA sau Fortezza;

pentru codări simetrice: RC2, RC4, IDEA, DES, Triple DES sau AES;

pentru funcții de hash unidirecțional: MD5 sau SHA.

Algoritmii criptografici utilizați în protocolul SSL sunt grupați în seturi.

De exemplu : setul RSA-RC4-MD5, indică faptul că, pentru schimbarea cheilor simetrice și pentru autentificare se folosește algoritmul RSA, pentru criptarea informațiilor se folosește algoritmul RC4, iar pentru verificarea integrității algoritmul MD5.

III.2. Mecanismul de funcționare SSL și TLS

SSL este un sistem de criptare sofisticat care nu cere clientului și server-ului să asigure o cheie secretă pentru a fi schimbată între client și server înainte ca tranzacția sa fie inițiată. Protocolul SSL folosește chei publice/private pentru a oferi un sistem de criptare flexibil, care poate fi setat în momentul tranzacției securizate.

În sistemele de criptare tipice, clientul și serverul sunt nevoiți să folosească o cheie secretă care a fost pre-configurată pe sistemele lor. Într-un astfel de sistem, clientul va utiliza cheia secretă pentru criptarea datelor. Serverul va folosi aceeași cheie secretă pentru a decripta datele. Aceeași logică se aplică pe server spre direcția clientului.

Acest tip de chei pre-configurate secrete nu sunt potrivite pentru serviciile web securizate, ce implica milioane de utilizatori care nu au niciun aranjament în prealabil al cheilor secrete cu server-ul securizat. Protocolul SSL rezolvă această problemă prin utilizarea cheilor asimetrice. Aceste chei sunt definite în perechi de chei publice si private. După cum sugerează si numele, cheia publică este disponibila gratuit pentru oricine. Cheia privată este cunoscută doar de server, care are nevoie de un certificat digital și o cheie privată corespunzătoare.

Cheile secrete prezintă două proprietăți importante:

Datele criptate de către client folosind cheia publică, pot fi decriptate doar de cheia server-ului privat. Datorită acestei proprietăți a cheilor, clientul este capabil să transmită date securizate care pot fi înțelese numai de către server.

Datele criptate de către cheia de pe serverul privat, pot fi decriptate folosind cheia publica. Această proprietate este utila la nivelul clientului in timpul autentificării pe server. Daca server-ul trimite un mesaj cunoscut (spune numele serverului), clientul poate fi sigur de autenticitatea serverului de autentificare.

Prima proprietate ne permite să utilizăm cheile secrete convenționale. O cheie secretă poate fi trimisă de către client ca și datele care au fost criptate utilizând cheia publică. Această cheie secretă poate fi decriptată doar de către server. După ce serverul primește cheia, clientul și serverul sunt în măsură să comunice utilizând această cheie.

Criptarea bazată pe cheile publice/private, este folosită doar pentru hand-shaking și schimbul de chei secrete. După ce cheile au fost schimbate, cheile simetrice sunt puse in funcțiune. Acest lucru se face din două motive:

Tehnica de criptare bazată pe cheile publice/private este foarte scumpă, și prin urmare utilizarea lor ar trebui redusă la minimum.

Mecanismul cu chei secrete este necesar pentru a servi comunicării serverului cu clientul.

Inițierea unei sesiuni folosind protocolul de hand-shaking (figura III.2.1) presupune urmarea mai multor pași. O conexiune securizată este necesară pentru această sesiune. În cazul navigatoarelor web, în momentul accesări unui site prin protocol HTTPS se stabilește o conexiune TCP pe portul 443 TCP HTTPS. În acest moment începe realizarea legăturii SSL pe noua conexiune TCP prin următorii pași:

CLIENT_HELLO – clientul trimite un mesaj CLIENT_HELLO spre server. Mesajul include cea mai recentă versiune de SSL și TLS suportată de client, cifrul suportat de client ( enumerat in regim preferențial ), identificatorul sesiunii, metoda de compresie suportată și datele generate aleator de către client care stau la baza calculelor criptografice.

SERVER_HELLO – server-ul răspunde cu un mesaj SERVER_HELLO. Acest mesaj conține numărul de versiune al protocolului, setările cifrului, date generate aleator, metoda de compresie și identificatorul de sesiune.

SERVER_KEY_EXCHANGE – imediat după trimiterea lui SERVER_HELLO, serverul trimite către client un mesaj de tip SERVER_KEY_EXCHANGE care conține certificatul cu cheia publică. În cazul în care sunt necesare și certificate din partea clienților este generată o cerere în acest sens.

SERVER_HELLO_DONE – serverul trimite acest mesaj final prin care indică finalizarea negocierii inițiale.

CLIENT_KEY_EXCHANGE – clientul răspunde cu acest mesaj care constă în cheia simetrică a sesiunii, criptată cu cheia publică a serverului primită la pasul 3 (SERVER_KEYEXCHANGE). În acest moment atât clientul cât și server-ul sunt în stare să calculeze cifrul sesiunii SSL.

CHANGE_CIPHER_SPEC – clientul trimite către server acest mesaj prin care specifică ce setări de securitate ar trebui utilizate, cifrul stabilit anterior. Serverul răspunde afirmativ cu un mesaj de același tip CHANGE_CIPHER_SPEC, precizând ca se activează opțiunile de securitate cerute de client

FINISHED – acest mesaj este trimis de client precizând că din partea sa protocolul de negociere s-a încheiat cu succes si in același timp validează ca nici una dintre comenzile trimise anterior nu au fost modificate in timpul tranzacțiilor. Serverul trimite si el un mesaj FINISHED, permițând clientului sa verifice opțiunile de securitate activate. După trimiterea acestui mesaj negocierea este finalizată, iar conexiunea este stabilită. În continuare toate comunicațiile sunt criptate, până la terminarea sau finalizarea sesiunii.

Protocolul SSL/TLS suporta mai mulți algoritmi de criptare cu cheie secreta, printre care DES, Triple-DES,IDEA, RC2 si RC4. Cel mai puternic dintre aceștia folosește triplu DES cu trei chei separate pentru criptare si SHA-1 pentru integritatea mesajului. Aceasta combinație este relativ lenta, așa ca de cele mai multe ori este folosita doar pentru operații bancare si alte aplicații in care este necesar cel mai mare nivel de securitate. Pentru aplicații obișnuite de comerț electronic este folosit RC4 cu o cheie pe 128 de biți pentru criptare si MD5 pentru autentificarea mesajului. RC4 folosește cheia de 128 de biți ca punct de plecare si apoi o extinde la un număr mult mai mare pentru uzul intern.

III.3. Procesul de generare a certificatelor de securitate

Capitolul IV. Implementarea aplicației server

Aplicația server dezvoltată în cadrul acestui proiect are ca scop principal crearea unei platforme de administrare a conținutului care va fi afișat în cadrul aplicației client.

Accesul la această secțiune a aplicației este restricționat utilizatorilor comerciali, ale căror este acela de a adăuga conținutul care va fi promovat. De asemenea, utilizatorii care au rol de administrator pot accesa, altera și elimina informațiile adăugate de alți utilizatori.

Aplicația este implementată folosind Laravel, o platformă construită peste limbajul PHP care oferă pe lângă multe altele, o arhitectură de tipul MVC (Model-View-Controller), un mecanism pentru interogarea și alterarea bazei de date.

IV.1. Structura arborelui de navigare

Din pagina principală a aplicației server se poate ajunge la secțiunea de administrare doar prin autentificare ca utilizator cu privilegii elevate. Ca și un utilizator cu privilegii normale, după înregistrare, următorul pas îl reprezintă descărcarea și autentificarea în cadrul aplicației client.

Structura principală de navigare este descrisă în figura IV.1.1.

Figura IV.1.1 Structura principală de navigare

În momentul în care un utilizator cu privilegii elevate este autentificat, se afișează pagina principală dedicată utilizatorilor înregistrați. Pornind de la această pagină un utilizator poate să gestioneze diferitele evenimente, locații și galerii. De asemenea în cadrul meniul principal, un utilizator poate să-și altereze detaliile contului și să se deconecteze. Un utilizator de tipul administrator are acces suplimentar la gestionarea conturilor și a categoriilor.

Schema de navigare pentru un utilizator înregistrat este descrisă în figura IV.1.2.

Figură IV.1.2. Structura completă de navigare

Prin rularea comenzi php artisan route:list în consolă se poate vizualiza un tabel conținând întreaga structură a site-ului (figura IV.1.3). Fiecare intrare din tabel oferă informații privitoare la metoda acceptată(GET, POST, HEAD; PATCH, PUT, DELETE), adresa relativă, numele intern al rutei, clasa/metoda apelată și eventualele filtre pentru acces.

Figura IV.1.3 Extract parțial din structura detaliată a arborelui de navigare

IV.2. Structura bazei de date

Un mare avantaj al platformei Laravel îl reprezintă faptul că implementează conceptul de fișiere de migrare( migrations ) și fișiere de definire a datelor inițiale ( seeds ).

Fișierele de migrare pot fi definite ca un mecanism de control a sub-versiunilor pentru baza de date. Ele facilitează lucrul în echipă prin faptul că permit modificarea bazei de date putându-se reveni oricând la structura care exista la un moment dat.

Rularea tuturor migrațiilor pentru construirea tabelelor din baza de date se realizează executând comanda următoare în consolă: php artisan migrate. Există de asemenea și alte comenzi specifice care pot fi rulate:

php artisan migrare:rollback – Această comandă anulează alterările produse de ultima operație de migrare

php artisan migrate:reset – Anulează toate modificările aduse bazei de date

php artisan migrate:refresh – Anulează toate modificările aduse bazei de date și rulează din nou fișierele de migrare

La implementarea aplicației server s-au definit mai multe fișierele de migrare, ele fiind prezente în cadrul directorului database/migrations.

Fiecare clasă extinde prin definiție clasa Migration din cadrul nucleului Laravel. În cadrul acestor clase se definesc cele 2 funcții relevante:

up() – care este responsabilă de modificarea structurii la baza de date

down() care este responsabilă de procesul de eliminare a modificărilor aduse de funcția up()

Pentru a simplifica și organiza codul utilizat la crearea structurii bazei de date, în cadrul procesului de dezvoltare a aplicației server, au fost create fișiere de migrare diferite pentru fiecare set de instrucțiuni care controlează conținutul unei tabele.

Adăugarea unei tabele la baza de date se realizează prin apeluri statice ale clasei Schema. În continuare se prezintă modalitatea de definire ale uneia dintre tabelele adăugate în baza de date alături de funcțiile ajutătoare oferite de platforma Laravel:

Schema::create( 'users', function ( Blueprint $table ) {

$table->increments( 'id' );

$table->integer( 'role_id' )->unsigned()->default( 0 );

$table->string( 'name' )->default( '' );

$table->string( 'username' )->default( '' )->unique();

$table->string( 'email' )->unique();

$table->string( 'password', 60 );

$table->string( 'api_token', 32 );

$table->rememberToken();

$table->timestamps();

} );

Rularea acestui cod va genera echivalentul următorului cod MySQL:

CREATE TABLE `users` (

`id` int(10) unsigned NOT NULL,

`role_id` int(10) unsigned NOT NULL DEFAULT '0',

`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',

`username` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',

`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,

`password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,

`remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,

`api_token` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,

`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'

);

În exemplul de mai sus se adaugă tabelei users o coloană id are cărei valoare se incrementează automat la fiecare inserare. Funcția $table->string() adaugă on coloană de tipul varchar cu dimensiunea specificată.

Funcția $table->rememberToken() are rolul de a crea un câmp de tipul varchar care este utilizat intern de către Laravel pentru stocarea unui șir unic utilizat pentru identificarea utilizatorului. Funcția $table->timestamps() generează două câmpuri care au denumirea standardizată created_at si updated_at în care se vor reține momentele în timp ( sub formă de timestamp ) la care s-au prodis modificărileaduse intrări corespunzătoare.

În urma rulării fișierelor de migrare se obține o bază de date având structura din figura 5.

Următorul pas îl reprezintă completare bazei de date folosind date pentru testare. Acest lucru a fost realizat folosind procesul de „seeding”.

Laravel oferă un șablon referitor la modul în care se poate derula acest proces. Se creează o clasă care extinde clasa Seeder oferită de platformă. În cadrul funcției run se adaugă toate intrările care vor fi inserate în baza de date.

Pentru a funcționa, această clasă trebuie apelată manual din cadrul fișierului DatabaseSeeder astfel: $this->call('CategoryTypesTableSeeder').

Pentru a putea utiliza baza de date și tabele adăugate prin procesul de migrare, trebuie create modele pentru fiecare obiect diferit care va fi utilizat în cadru aplicației. În cadrul modelelor sunt descrise proprietățile care pot fi accesate, asignate și ascunse alături de relațiile față de celelalte modele. Laravel oferă o suită de funcții prin care relațiile dintre modele se pot descrie în mod asemănător cu diagramele ERD(Entity Relationship Diagram).

IV.3.

Similar Posts

  • Dispozitiv de Hranire al Animalelor de Companie Actionat Prin Internet

    Cuprins Lista figurilor …………………………………………………………………………………………………………………….11 Lista acronimelor………………………………………………………………………………………………………………..13 Introducere…………………………………………………………………………………………………………………………15 Microcontrolere. …………………………………………………………………………………………………………..17 Definiții si concepte………………………………………………………………………………………………..17 Arhitectura microcontrolerelor……………………………………………………………………………..18 Microcontrolere integrate sau de memorie externa…………………………………………….19 Unitatea Centrala de Procesare………………………………………………………………………19 Arhitecturea de bază a CPU………………………………………………………………….19 Microcontrolere cu arhitectura CISC sau RISC………………………………………21 Microcontrolere cu arhitectura Harvard sau Van Neumann………………………21 Setul de instructiuni…………………………………………………………………………….22 Memoria…………………………………………………………………………………………………….23 Intrare/Iesire digital si analogic…………………………………………………………………24 Intreruperi…………………………………………………………………………………………………….24 Temporizator………………………………………………………………………………………………..25 Atmel AVR ATmega32U4……………………………………………………………………………….26…

  • Invertor Trifazat cu Comanda Rectangulara Si Sinus Modificat

    INVERTOR TRIFAZAT CU COMANDĂ RECTANGULARĂ ȘI SINUS MODIFICAT CUPRINS CAP. 1. NOȚIUNI INTRODUCTIVE Introducere 1.2. Generalități despre convertoare statice c.a./c.c. și c.c./c.a CAP. 1. INVERTOARE TRIFAZATE DE TENSIUNE Modelul matematic al sarcinii rezistiv-inductive 1.2. Simularea invertorului trifazat CAP. 2. COMANDA IN INVERTOARELE TRIFAZATE 2.1.Comanda în undă rectangulară 2.2. Comanda PWM pentru invertoare trifazate 2.3 Timpul…

  • Lumina Dinamica CU Afisare Matriciala PE 64 DE Led Uri

    Cuprins: Capitolul 1-Introducere 1.1-Noțiuni de bază privind implementarea tehnicii numerice de măsurare-afișare a informației 1.2-Aspecte tehnologice privind transmiterea discretă a semnalelor și datelor în sisteme de măsurare-afișare a informației Capitolul 2-Variante constructive Studiu comparativ 2.1-Sistem de prelucrare a informației cu afisare matricială 2.2-Sistem de prelucrare a informației cu afișare directă 2.3-Analiză comparativă Capitolul 3-Proiectarea schemei…

  • Structura Functionala a Magazinului Virtual

    INTRODUCERE În ultimele două decenii dezvoltarea fără precedent a tehnologiilor informaționale determinate de necesitatea stocării și a transmiterii rapide a informațiilor cu costuri cât mai mici, a revoluționat comerțul global, redefinind principiile clasice ale marketingului. În prezent noțiunea de comerț electronic a devenit sinonim cu creșterea profitului. Lucrarea de disertație se numește Realizarea și administrarea…

  • Tehnologia de Tratament Termic Pentru Piesa Filiera Avand O Productie de 15000 Seturi An

    1. Alegerea materialului adecvat produsului si precizarea tratamentelor termice necesare. 2. Stabilirea fluxului tehnologic de tratament termic. 3. Calculul parametrilor termici si temporali al operatilor de tratament termic. 4. Calculul tensiunilor interne la incalzirea si racirea produselor. 5. Calculul utilajului de baza si auxiliar ( bilantul termic ). 6. Calculul produttivitatii utilajului de baza. 7….

  • Tehnologia de Fabricare a Inghetatei

    Diferitele tipuri de înghețată se caracterizează prin compoziție, ingredientele folosite,și este necesar ca pentru fiecare tip de înghețată să se stabilească rețeta de fabricație, pornind de la materiile prime și auxiliare disponibile, a căror compoziție este obligatoriu să fie cunoscută. Pentru a stabili rețetele de fabricație se poate aplica una dintre următoarele metode de calcul:…