Webov aplikace TNPW 2 Ing Ji tpnek Obsah
Webové aplikace TNPW 2 Ing. Jiří Štěpánek
Obsah přednášky • Webové aplikace a jejich historie • Výhody a nevýhody webových aplikací • Jak webová aplikace funguje? • Vývoj webových aplikací • Webové technologie • Internet, doporučená literatura
Historie webových aplikací • Do poloviny 90. let • Statické webové stránky • Text, obrázky • Akademická sféra, odborná veřejnost • Uživatelé mohou obsah webových stránek ovlivnit jen minimálně • Druhá polovina 90. let • Dynamické webové stránky, webové služby (na přelomu století) Multimediální obsah • Přístupné pro nejširší veřejnost • Interaktivita s uživatelem • http: //evolutionofweb. appspot. com/ (interaktivní časová osa)
Co to je webová aplikace? • Wikipedia – „Webová aplikace je poskytovaná uživatelům z webového serveru přes počítačovou síť Internet, nebo její vnitropodnikovou obdobu (Intranet). “ • Jsou postaveny na modelu klient/server = dotaz > odpověď • Na straně uživatele (klienta) je webový prohlížeč, na opačné straně je webový server (v nějaké podobě – HW, virtualizace, serverová farma… ) • Nejčastěji jde o webové stránky s aplikační logikou – ta je obvykle na straně serveru (část, nebo i celá logika může být i na klientovi) – výstup je zobrazen v okně prohlížeče na straně uživatele (klienta) bez ohledu na zařízení • Pojem webová aplikace není striktně (normativně) vymezen! • Mezi webové aplikace jsou někdy řazeny i služby typu Web API (nejčastěji WS/REST), jejich výstup není určen přímo uživateli (BFU), ale je dále zpracováván aplikačně
Dynamické generované webové stránky • Nejčastěji typ webové aplikace (jsou i další možnosti… Flash, Ajax a spol. /RIA, SPA) • Používají (X)HTML kód (+ CSS a Java. Script) jako rozhraní pro komunikaci s uživatelem • Na rozdíl od „běžných“ statických WWW stránek je na straně serveru navíc přítomna aplikační logika, která reaguje na specifické požadavky klientů (což výrazně zvyšuje úroveň interaktivity s uživatelem) • Příklady • • • Virtuální obchody (e-shopy) Mapy, katalogy a vyhledávací služby Podnikové informační systémy IS pro studijní agendu Redakční systémy (CMS) Sociální sítě (Facebook, Twitter a spol. )
Webové služby (web services) • Model klient/server • Na straně klienta je většinou aplikace, která odpověď serveru dále zpracovává • Webové služby používají formát XML, ve kterém spolu klient a server komunikují (vlastní komunikace zpravidla probíhá přes protokol HTTP/HTTPS) • Pomocí webových služeb je možné řešit komunikaci aplikací v heterogenním prostředí, protože používaný formát (XML) a protokoly (SOAP = vzdálené volání procedur, HTTP/HTTPS = přenos dat) jsou dostatečně univerzální • • Popis každé webové služby (dostupné metody a parametry) je k dispozici v XML formátu (*. wsdl soubor) • Webové služby je možné vytvářet na všech běžně používaných vývojových platformách (Java, . NET, PHP). • S čím dál výraznějším trendem vzájemného propojování existujících aplikací roste význam technologií, které umožňují jejich integraci – tedy i webových služeb! • Pozor, webové služby nemusí být vždy tím nejvhodnějším integračním řešením!
REST (REpresentational State Transfer) • REST navrhl Roy Fielding (spoluautor HTTP protokolu) • Model klient/server • Je bez-stavový, může pracovat z cache, jednoduchá implementace • Je orientován datově (ROA), na rozdíl od webových služeb (orientovány procedurálně) • Používá běžné HTTP příkazy (GET, POST, PUT a DELETE) pro CRUD operace • Stav aplikace a chování je vyjádřen takzvaným resourcem (klíčová abstrakce), každý resource musí mít unikátní identifikátor (URL, URN) • REST formáty pro výměnu dat… Atom/RSS, JSON, XML
Výhody webových aplikací • Na straně klienta stačí webový prohlížeč, někdy s příslušným pluginem (Flash, Silverlight) – od nutnosti pluginů se ustupuje (nové možnosti HTML 5)! • Jednoduchá údržba – změny pouze na straně serveru • Aktuálnost – každá úprava se okamžitě projeví (aplikační logika, data) • Nižší nároky na HW klientů – stačí jakékoliv zařízení s webovým prohlížečem • Nižší provozní náklady • Nezávislost na platformě (OS) na straně klienta • Přizpůsobení UI různým koncovým zařízením (exponenciálně roste počet přístupů z mobilů) • Výborná dostupnost, využití v lokální síti (Intranetu) i v Internetu (24/7)
Nevýhody webových aplikací • Nehodí se pro některé typy aplikací • Vysoká závislost na poskytovateli aplikace • Roadmapa aktualizací nemusí vyhovovat všem klientům (viz. nasazení Office) • Nemožnost práce v offline režimu (začíná se řešit – HTML 5, Adobe Air) • Omezené možnosti uživatelského rozhraní • Omezené možnosti validace dat na straně klienta (webový prohlížeč) • Nedokonalá podpora standardů (HTML, CSS, Java. Script) v prohlížečích • Bez-stavová komunikace při použití protokolu HTTP/HTTPS (lze obejít) • Množství přenášených dat (značkovací jazyk) • Problémy s bezpečností (webový prohlížeč, dostupnost v Internetu)
Jak webová aplikace funguje? • Webová aplikace je postavena na modelu klient/server • Na straně klienta je obvykle vizuální rozhraní aplikace (User Interface, frontend) • HTML + CSS + Java. Script (nejčastější případ) • Flash/Flex • Silverlight… • Na straně webového serveru (backend) je aplikační logika, datové úložiště atd. • Část aplikační logiky může být i na klientovi (Java. Script)! • Na straně serveru může být jen datové API (SOAP, REST apod. ) – potom je aplikační logika na klientovi celá (některé SPA) • Obvykle se ke komunikaci využívá protokol HTTP/HTTPS (port 80, resp. 443), má určité nedostatky… Google projekt SPDY, resp. nově schválený HTTP/2 >> rychlejší načítání stránek, bezpečnější šifrování • Klientským zařízením nemusí být jen stolní počítač!
Synchronní a asynchronní komunikace • Synchronní komunikace • Je (zatím) častější • Dotaz klienta + odpověď serveru (znáte ze statických webů) • Iniciátorem komunikace je vždy klient (webový prohlížeč) • Aktuálnost informací má určité zpoždění (až když se klient zeptá) • Asynchronní komunikace • Je prováděna na pozadí otevřené stránky, zatímco stránka normálně interaguje s uživatelem • AJAX • Asynchronní komunikace - realtime • Web. Sockets + platformní frameworky pro práci s ním • Permanentně otevřený kanál, oboustranná komunikace serveru a klientů • Signal. R: Realtime web v ASP. NET (Michal „Altair“ Valášek)
Vývoj webových aplikací • Webové aplikace mají, v porovnání s klasickými desktopovými a klient/server aplikacemi, určité specifické požadavky • Souběžný přístup velkého množství klientů >> rychlost odezvy • Protokol HTTP je bez-stavový >> nutnost použití session a cookies • Různá koncová zařízení, snaha o co nejmenší datový traffic (odezva, peníze) • Při návrhu GUI aplikace je vhodné přesně specifikovat použité technologie a standardy • I pro webové aplikace platí tradiční vývojový cyklus. . . Analýza * –> Implementace –> Testování * –> Nasazení * –> Provoz * Jednotlivé fáze vývojového cyklu (*) může ovlivnit zákazník (zadavatel)!
Testování webových aplikací • Je třeba klást maximální důraz na testování (nejlépe automatizované) a brát v úvahu rozdíly mezi testovacím a skutečným provozem (HW, SW, konfigurace)! • Existují různé druhy (automatických) testů • Funkční, integrační, zátěžové, unit testy apod. • Při opakovaném použití (iterace) přináší automatické testování výraznou úsporu času a lidských zdrojů (kapacit)… snižuje náklady na projekt! • „Automatizace snižuje pravděpodobnost, že uděláme při zadávání chybu, ale zvyšuje pravděpodobnost, že na něco zapomeneme“ – Michael Nygard • Začněte měřit výkon systému (nebo jeho části) co nejdříve • Agilní metodiky: Výkonnostní testy nejpozději od 3. iterace (1 iterace = cca 2 -4 týdny) • Pozdějším nasazením se připravíte o možnost identifikovat, jaká změna měla za následek případné problémy s výkonem
Aplikační vrstvy • Při návrhu webové aplikace je vhodné rozdělení do tzv. aplikačních vrstev • Nejjednodušší (obecné) rozdělení: Přístup k datům (persistence) – Aplikační (business) logika – Prezentační vrstva (UI) • Návrhové vzory jsou užitečné, pomáhají ke správnému návrhu designu aplikace!
Knihovny a frameworky • Rozdělení aplikace do vrstev umožňuje (kromě dalších výhod) při vývoji využít nejrůznější podpůrné knihovny a frameworky, které mohou výrazně zjednodušit a zefektivnit vývoj, např. • Přístup k datům (DB, file systém, různé formáty…), ORM Object Relational Mapping) • Automatizované testování (unit testy) • Autentizaci uživatelů • Příklad některých používaných knihoven a frameworků • Java – JDO, Spring, JUnit, Hibernate (ORM) • . NET – ADO. NET, NUnit, EF, LINQ, NHibernate (ORM), Spring. NET, ASP. NET MVC • PHP – PEAR, Smarty, Fast. Templates, Nette, Zend • Používání frameworků a knihoven je trend!
Chyby při vývoji web aplikací I • Je závažnou (a bohužel obvyklou) chybou programovat webové aplikace jako jednouživatelské • Při návrhu aplikace se nepočítá s jejím budoucím rozvojem/rozšířením, integrací s dalšími aplikacemi nebo rostoucím zatížením (více uživatelů) • Živelný vývoj – často se začne programovat bez dostatečné analýzy nebo bez komunikace se zákazníkem (chybí prototyp UI apod. • Uživatelům se nabízí zbytečně složité a nepřehledné ovládání • Vývojové, testovací a provozní prostředí aplikace mají často rozdílnou konfiguraci (liší se verze použitého SW, nastavení parametrů apod. ) • Podceňuje se fáze testování (funkční, integrační, zátěžové), nepoužívá se TDD (unit testy) • Neoddělují se jednotlivé aplikační vrstvy (data – business – user inteface) • Objevují se zbytečné duplicity v programovém kódu • Znovu se vynalézá kolo >> nepoužívají se vzory (design patterns), best practice • Programují se funkce, která uživatel nepotřebuje nebo nevyužívá (řada z nich není v UI vůbec vidět) • Ignorují se základní bezpečnostní pravidla pro přístup k aplikacím a k datům
Chyby při vývoji web aplikací II • UI je složitý, nepřehledný, často s nestandardním ovládáním • Netestují se vstupní data od uživatelů (uživatel = neřízená střela) • Zůstávají neukončená připojení k databázi • Je špatně navržená struktura databáze, chybí indexy apod. • Používají se neoptimalizované SQL dotazy, často bez parametrů • Není ošetřena souběžná modifikace dat • Není ošetřen opakovaný zápis dat (F 5, obnovení stránky) • Nejsou správně nebo vůbec ošetřeny výjimky (chyby)! • Nevyužívá se vyrovnávací buffer při generování odpovědi • Nevyužívá se kešování (cache) stránek při opakovaných požadavcích • Přenáší se zbytečně velké množství dat mezi serverem a klientem (pozor na mobily!) • Při objektovém programování se chybně pracuje s kolekcemi • Programátor po sobě „neuklízí“ v paměti, spoléhá na GC nebo na zázrak • http: //zdrojak. root. cz/clanky/programator-prestava-byt-amater-kdyz/
Volba technologie • Volbu technologie ovlivňuje řada faktorů, např. • Požadavky (různé role, potřeby) • Použitá platforma (OS, aplikační server, databáze) • Požadavky na bezpečnost • Zvyk (zadavatel, dodavatel), obchodně-politické vlivy • Dostupnost know–how na straně dodavatele • Cena řešení • Prostředí, podmínky provozu • Co to přinese pro business (náklady, termíny, náročnost… udržitelnost!) • Použitá technologie může výrazně ovlivnit rychlost (odezvu) webové aplikace směrem ke klientovi (ASP/ASP. NET –> až 3 x větší rychlost ASP. NET). • Volba vhodné technologie ještě nezaručuje dobrý výsledek
Technologie používané u web aplikací • Na straně klienta • HTML • CSS, DHTML, XSLT • Klientské skripty (Java. Script, dříve i VB. Script*) • Java aplety*, Active. X* • Flash*/Flex*, Silverlight*, AJAX a další technologie ze skupiny RIA • Na straně serveru • Interpretované (např. Perl, ASP*, PHP, Python, Ruby) • Částečně kompilované (runtime, virtual machine) (JEE, ASP. NET) • Kompilované (CGI skripty*) • Hvězdičkou (*) jsou označené zastaralé nebo jinak problematické technologie
Používané technologie z hlediska historie • Časová osa • • Pravěk – HTML formuláře a CGI skripty • Středověk – Perl, ASP, JSP, PHP, Java Aplety, Active. X • Dnes – AJAX (HTML 5 + Java. Script), JEE (J 2 EE), ASP. NET, Ruby (on Rails), Python (Django), PHP (s frameworkem) • Na straně klienta (prohlížeče) je, a v nejbližší době bude, nejdůležitější kombinace HTML 5 + Java. Script + CSS 3. Bez ohledu na technologie použité na straně serveru! • Výhledově HTML 5 může nahradit nativní aplikace, ale nebude to hned! • Responzivní, progresivní aplikace. • Přizpůsobování mobilním zařízením (touch events, service workers atd. . ) • Rozšířenost vybrané technologie ještě automaticky neznamená její kvalitu!
Odkazy na internetu • http: //www. kosek. cz/php/index. html (PHP) • http: //www. asp. net/ (ASP. NET) • http: //java. sun. com/javaee/index. jsp (Java/JEE) • http: //java. sun. com/javaee/javaserverfaces/ (Java/JSF) • http: //www. hibernate. org/ (ORM) • http: //nhibernate. sourceforge. net/ (ORM) • http: //www. smarty. net/ (PHP framework) • http: //www. ruby-lang. org/en/ (Ruby) • http: //tomas-net. blogspot. com/2006/04/souboj-tlust-tenk-aplikace. html • http: //zdrojak. root. cz/clanky/prezentacni-vzory-zrodiny-mvc/ • http: //www. root. cz/zpravicky/jak-zrychlit-web/ • http: //zdrojak. root. cz/clanky/jak-zrychlit-server-nekolik-praktickych-postrehu/ • http: //zdrojak. root. cz/clanky/single-page-apps-a-reseni-problemu-s-historii/ • http: //zdrojak. root. cz/clanky/mobilizujeme-web-v-html 5/ • http: //www. netmagazine. com/features/future-css-layouts • http: //www. zdrojak. cz/clanky/metody-komunikace-v-html 5/ • http: //www. youtube. com/watch? v=v. PXK 82 Cay. YE&feature=plcp (video přednášky o cache) • http: //www. robertdresler. cz/2013/09/snizovani-rizikovosti-softwarovych. html rizikovost projektů
Doporučená literatura • Martin, C. Robert – Čistý kód – Návrhové vzory, refaktorování, testování a další techniky agilního programování , Computer Press 2009 • Pecinovský, Rudolf – Návrhové vzory – 33 vzorových postupů pro objektové programování, Computer Press 2007 • Pecinovský Rudolf – OOP – Naučte se myslet a programovat objektově, Computer Press 2010 • Earl Thomas – SOA Servisně orientovaná architektura, Computer Press 2009 • Mac. Donald, Matthew; Szpuszta, Mario – ASP. NET 3. 5 a C# 2008, Zoner Press 2008 • Watson, Ben – C# 4. 0 – řešení praktických programátorských úloh, Zoner Press 2010 • Macháček, Jan; Vukotic, Alexa; Chakraborty, Anirvan; Ditt Jessica – Pro Spring 3, Apress 2009 • Microsoft – Vytváříme zabezpečené aplikace v Microsoft ASP. NET, CP Books (Computer Press) 2004 • Taylor, Art; Buege Brian; Layman Randy – Hacking bez tajemství: Java a J 2 EE, Computer Press 2003 • Huseby, Sverre H. – Zranitelný kód, Computer Press 2006
Konec prezentace Otázky / Připomínky
- Slides: 23