Laboratorul de programare web isi propune sa invete studentii concepte fundamentale in acest domeniu si a fost gandit in asa fel incat sa se dobandeasca concepte uzuale pentru dezvoltarea de aplicatii web. Sustinem pluralismul in folosirea de tehnologii dar sugeram ca in practica sa fie folosita acea tehnologie care este cea mai adecvata pentru proiectul in cauza.
Laboratorul se va axa pe doua tehnologii care se gasesc pe piata de dezvoltare a aplicatiilor web, ASP.NET si React pentru dezvolatea a backend-ului respectiv a frontend-ului. Prima jumatate a laboratorului se va axa pe dezvoltarea backend-ului in .NET.
.NET este o platforma de dezvoltare creata de Microsoft initial pentru Windows dar care acum este cross-platform. Este una dintre platformele cele mai folosite pentru dezvoltare web pentru aplicatii enterprise, alta tehnologie foarte folosita este Java Spring. Avantajele de a folosi .NET sunt ca e cross-platform, usor de folosit, are o comunitate larga si are documentie buna. Principalul limbaj folosit pentru scrierea de aplicatii in .NET este C#, un limbaj orientat pe obiecte si functional similar cu Java.
Veti avea nevoie de urmatoarele inainte de a incepe dezvoltarea efectiva:
docker-compose -f .\docker-compose.yml -p mobylab-app-db up -d
Pentru programarea efectiva in C# sunt necesare doar cunostinte de baza de programare orientate pe obiecte si programare functionala. Pentru cine stie deja Java adaptarea la C# nu ar trebui sa fie o problema, unde vor fi diferente majore vor fi explicate la laborator.
Exista particularitati in scrierea de cod C#, daca aveti probleme in a intelege scheletul de laborator puteti consulata documentatia de la Microsoft si cartea electronica a lor pentru dezvoltarea de aplicatii web de aici, chiar daca sunt expuse idei in implementarea arhitecturilor pe microservicii principiile de design patterns si best practice sunt folositoare si pentru dezvoltarea de aplicatii backend monolit.
In cadrul acestui laborator vom imparti aplicatia web in doua componente, frontend si backend. Frontend-ul este aplicatia vizibila pentu utilizator si ruleaza in browserul acestuia. Pentru ca avem frondend-ul ca componenta de sine statatoare acesta va fi o aplicatie SPA (Single-Page Application) care, in contrast cu un MPA (Multi-Page Application), este o singura pagina care doar isi schimba continutul dinamic in functie de actiunile utilizatorului si datele servite de catre backend. Backend-ul este un server de HTTP care expune date si servcii printr-un API sau poate chiar sa expuna continut static si pagini web.
Intr-o aplicatie MPA fiecare pagina servita pentru browser este creata printr-un template HTML si populata cu date direct de catre server iar modelul de programare folosit aici este MVC (Model-View-Controller), insa in acest laborator vom folosi un SPA pentru frontend astfel incat serverul va expune doar date si servicii printr-un API. Pentru simplitate API-ul va fi de tip REST (REpresentational State Transfer) unde datele schimbate intre server si client sunt date in format JSON.
Aplicatiile backend si ele pot fi impartite in doua categorii, monolit si bazate pe microservicii. Backend-ul monolit este un singur proces care are un server HTTP si contine intreaga logica a aplicatiei pe cand microserviciile sunt mai multe procese care lucreaza impreuna pentru a implementa logica aplicatiei, fiecare microserviciu avand propria responsabilitate in intregul sistem distinct de celelalte. Exista avantaje si dezavantaje pentru fiecare, noi o sa folosim o arhitectura de tip monolit pentru simplitatea implementarii.
Pentru a va ajuta la implementarea proiectului de la laborator puteti folosi scheletul pentru proiectul de .NET de pe Gitlab, insa pentru a incepe vom crea un proiect de backend in IDE-ul preferat selectand un template pentru .NET core de Web API cum se arata mai jos.
Veti observa ca punctul de intrare a programului este fisierul Program.cs, practic este o functie main care nu este declarata in mod explicit. Aici se creaza un obiect care reprezinta aplicatia web si poate fi configurata cum este si in exemplu configurarea pentru autorizare, pentru maparea controller-elor sau configurarea swagger-ului. Urmeaza sa fie delaliate mai multe in laboratoarele viitoare.
Veti gasi si un fisier appsettings.json care contine un JSON pentru configurarea aplicatiei, o sa fie folosit pentru a seta variabile ce sa fie folosite de backend. De asemenea, veti gasi si un controller foarte simplu, acesta va raspunde la cererile HTTP de la clienti. Trebuie sa retineti ca in dezvoltarea de aplicatii web se foloseste extrem de mult Dependency Injection, desi conceptul o sa fie detaliat mai mult la laboratoarele urmatoare puteti observa in cod ca componentele/clasele din proiect cum este acel WeatherForecastController nu este instantiat in mod explicit, instantierea se face in mod implicit de catre framework calculand dependentele acelei componente si injectandu-le in componenta la instatiere prin constructor cu este si logger-ul din exemplu la cerere componentei. Asa o sa puteti in laboratoarele urmatoare sa va folositi de componente in tot codul vostru cerandu-le prin constructor de la framework.
Rulati aplicatia de backend, o sa va deschida o pagina in browser cu un Swagger, sau cum se mai numeste altfel, OpenAPI Specification. Swagger-ul este o interfata simpla pentru testarea cererilor HTTP fara sa fie nevoie de un client HTTP si, de asemenea, acesta va descrie intregul API HTTP al serverului cu toate rutele si tipurile de date schimbate cu clientul. Incercati sa executati o cerere catre backend din pagina Swagger-ului. Swagger-ul este important pentru ca va usureaza testarea backend-ului si pentru ca descriind cum API-ul poate fi folosit ca sa generati in mod automat clientii HTTP pentru aplicatiile care consuma API-ul expus.
Instalati-va uneltele necesare pentru laborator si intrebati de ajutor daca intampinati dificultati.
Urmariti codul din WeatherForecastController si incercati sa-l modificati mergand pe intuitie si testand cu swagger-ul. Daca aveti intrebari intrebati asistentul/a, mai multe informatii o sa fie furnizate la urmatoarele laboaratoare.
Descarcati template-ul de proiect de pe gitlab-ul grupului nostru si incercati sa urmariti codul cu explicatiile din comentarii, daca nu pentru acest laborator atunci pentru data viitoare un o sa fie folosit ca demonstrator.
Tools > NuGet Package Manager > Manage NuGet Package for Solution…
pentru VS si Tools > NuGet > Manage NuGet Package for Solution
pentru Rider.