Webový framework (WF) nebo webový aplikační framework (WAF) je softwarový framework určený pro vývoj webových aplikací včetně webových služeb, webových zdrojů a webových API. Webové frameworky poskytují standardizovaný způsob vytváření a nasazování webových aplikací na World Wide Web. Jejich cílem je automatizovat rutinní činnosti při vývoji webových aplikací. Mnoho webových frameworků poskytuje například knihovny pro přístup k databázím, šablonovací frameworky a správu relací, přičemž často podporují opětovné využití kódu.[1] Přestože se často zaměřují na vývoj dynamických webových sídel, jsou použitelné i pro statické weby.[2]
Design World Wide Webu nebyl zpočátku dynamický, takže první weby byly obvykle tvořeny ručně kódovanými soubory v HTML umístěnými na webových serverech. Všechny úpravy zveřejněných stránek musel provádět jejich tvůrce. V roce 1993 však bylo představeno první rozhraní Common Gateway Interface (CGI) pro externí aplikace umožňující vytvářet dynamické webové stránky, které mohou reagovat na vstupy uživatele.[3]
Původní implementace CGI však obvykle způsobovala nezanedbatelné vytížení serveru, protože pro každý požadavek se spouštěl samostatný proces.[4] Novější implementace využívají různé techniky, např. perzistentní procesy, pro snížení nároků na prostředky serveru a zvýšení jeho výkonu.[zdroj?]
V roce 1995 se objevila první plně integrovaná vývojová prostředí pro WWW a byly představeny nové jazyky určené pro vytváření webů, jako ColdFusion, PHP a Active Server Pages.[zdroj?]
Přestože velká většina jazyků pro vytváření dynamických webových stránek má knihovny, které usnadňují běžné úlohy, webové aplikace často vyžadují specifické knihovny pro konkrétní úlohy, např. pro vytváření HTML (například Javakarta Faces).[zdroj?]
Koncem 90. let 20. století se začaly objevovat vyspělé kompletní („full stack“) frameworky, které často slučovaly několik knihoven užitečných pro vývoj webových aplikací do jednoho uceleného softwarového balíku pro vývojáře webů.[zdroj?]
Většina webových frameworků je založena na architektonickém vzoru Model-view-controller (MVC).[zdroj?]
Mnoho frameworků používá architektonický vzor MVC pro rozdělení datového modelu na obchodní logiku (controller – „řadič“) a uživatelské rozhraní („view“ – „pohled“). Toto oddělení je obecně považováno za dobrou praxi, protože modularizuje kód, prosazuje opětovné použití kódu a umožňuje použití různých rozhraní. Ve webových aplikacích to umožňuje používat různé pohledy, například pro poskytování odlišných webových stránek pro prohlížeče v mobilních telefonech a prohlížeče v počítačích, nebo poskytovat strojem čitelná rozhraní webových služeb.
Většina MVC frameworků je založena na push architektuře, která se také nazývá „action-based“. Tyto frameworky sestaví požadovanou stránku a data pak „natlačí“ prezentační vrstvě pro zobrazení výsledku.[5] Alternativou je pull architektura, nazývaná též „component-based“, u níž aktivita vychází z prohlížecí vrstvy, která může podle potřeby „vytahovat“ data z několika řadičů. V této architektuře může být pro vytvoření jednoho pohledu použito několik řadičů.
V třívrstvé architektuře jsou aplikace strukturovány do tří vrstev: klientské, aplikační a databázové.[6][7][8][9] Databáze je obvykle relační. Aplikace realizuje na serveru obchodní logiku a s klienty komunikuje protokolem HTTP.[10] Klientem webové aplikace je WWW prohlížeč, který zobrazuje HTML generované aplikační vrstvou.[11][12] Termín se nesmí zaměňovat s MVC, kde, na rozdíl od třívrstvé architektury, se považuje za dobrou praxi oddělit obchodní logiku od řadiče („střední vrstvy“).[13][14]
Frameworky jsou vytvářeny na podporu tvorby internetových aplikací založených na jednom programovacím jazyce, v široké škále od nástrojů pro obecné použití, jako např. Zend Framework a Ruby na Rails, které rozšiřují funkcionalitu určitého jazyka, až po programovatelné balíčky v nativním jazyce vytvořené kolem určité uživatelské aplikace, jako jsou systémy pro správu obsahu (CMS), některé nástroje pro vývoj mobilních zařízení a některé portálové nástroje.[15]
Webové frameworky musí fungovat podle architektonických pravidel prohlížečů a protokolů např. HTTP, který je bezstavový. Webové stránky jsou poskytované serverem a v prohlížeči mohou být změněny pomocí JavaScriptu. Oba přístupy mají své výhody a nevýhody.[zdroj?]
Změny stránky na straně serveru obvykle vyžadují obnovení stránky, ale umožňují použití libovolného jazyka a využití většího výpočetního výkonu serveru. Změny na straně klienta umožňují aktualizovat stránku po malých částech, což připomíná desktopovou aplikaci, ale jsou omezeny na JavaScript a spouštějí se v prohlížeči uživatele, který může mít omezený výpočetní výkon. Obvykle se používá nějaká kombinace obou přístupů.[16] Aplikace, které hojně využívají JavaScript a obnovují pouze části stránky, se nazývají Single Page Application (SPA, jednostránkové aplikace) a obvykle pro vytváření kódu využívají JavaScriptový webový framework na straně klienta.[zdroj?]
Patří sem Backbone.js, AngularJS, Angular, Ember.js, ReactJS, JQuery UI, Svelte a Vue.js.[17]
Webové aplikační frameworky založené na JavaScriptu, jako jsou React a Vue, poskytují širokou funkcionalitu, ale vynucují si i určité kompromisy. Tyto frameworky často rozšiřují nebo vylepšují vlastnosti, které poskytují nativní webové technologie, např. směrování, vývoj založený na komponentách a správa stavu. Přestože nativní webové standardy, včetně Web Components, moderních JavaScriptových API jako Fetch a ES Modules, a možnosti prohlížečů jako Shadow DOM, výrazně pokročily, frameworky jsou stále hojně používané díky své schopnosti zlepšit produktivitu vývojářů, poskytnout strukturovaný vzory pro rozsáhlé aplikace, zjednodušit řešení okrajových případů, a poskytování nástrojů pro optimalizaci výkonu. [18][19][20]
Frameworky mohou zavádět vrstvy abstrakce, což může způsobovat větší režii, větší rozsah balíků a zvýšenou složitost. Moderní frameworky, jako je React 18 a Vue 3, tyto problémy řeší používáním vlastností, jako je souběžné vykreslování, strom-shaking a selektivní hydratace. Tato vylepšení sice zlepšují efektivitu vykreslování a správu prostředků, jejich přínos však závisí na konkrétní aplikaci a implementačním kontextu. Odlehčené frameworky, např. Svelte a Preact, využívají jiné architektonické přístupy; Svelte zcela nahrazuje virtuální DOM překladem komponent do efektivního JavaScriptového kódu, Preact nabízení minimální alternativu kompatibilní s Reactem. Výběr frameworku zpravidla závisí na požadavcích aplikace, znalostech týmu, výkonnostních cílech a prioritách vývoje.[18][19][20]
Novější kategorie webových frameworků, včetně enhance.dev, Astro a Fresh, využívá nativní webové standardy při minimalizaci abstrakcí a nástrojů pro vývoj.[21][22][23] Tato řešení kladou důraz na progresivní vylepšování, vykreslování na straně serveru, a optimalizaci výkonnosti. Astro ve výchozím nastavení vykresluje statické HTML, přičemž aktualizuje pouze interaktivní části. Fresh se zaměřuje na vykreslování na straně serveru s nulovou režií za běhu. Enhance.dev upřednostňuje progresivní vylepšování vzory pomocí webových komponent. Přestože tyto nástroje snižují závislost na JavaScriptu na straně klienta tím, že přesouvají logiku na dobu sestavení nebo na provádění na straně serveru, stále však používají JavaScript tam, kde je nezbytný pro interaktivitu. Díky tomuto přístupu jsou obzvlášť vhodné pro výkonnostně kritické aplikace a aplikace zaměřené na obsah.[18][19][20]
Frameworky typicky vytvářejí řídicí strukturu programu a uživateli frameworku umožňují se „zapojit“ do vzniklého toku řízení vystavením různých událostí.[24] Tento návrhový vzor „inverze řízení“ je považován za definiční princip frameworku, a je přínosem pro kód tím, že vynucuje společný tok řízení pro tým, který si každý může přizpůsobit podobným způsobem.[24] Některé oblíbené „mikroframeworky“ např. Sinatra pro Ruby (který inspiroval Express.js) například poskytují „middleware“ háčky před a po HTTP požadavcích. Tyto middlewarové funkce mohou provádět cokoli, např. provádět protokolování, autentizaci a správu relací nebo přesměrovávání.[25]
Webové kešování je nástroj pro snížení objemu přenášených dat a zrychlení fungování webu pomocí ukládání webových dokumentů do mezipaměti. Webová mezipaměť ukládá kopie dokumentů, které jí procházejí, takže následné požadavky mohou být při splnění určitých podmínek uspokojeny z mezipaměti. Některé aplikační frameworky poskytují mechanismy pro kešování dokumentů a obcházení různých fází přípravy stránky, jako je přístup k databázi nebo interpretace šablon.[zdroj?]
Některé webové frameworky poskytují nástroje pro autentizaci a autorizaci, které umožňují webovému serveru identifikovat jednotlivé uživatele a omezit přístup k funkcím podle nadefinovaných kritérií. Jedním z příkladů je Drupal, který poskytuje přístup k stránkám na základě rolí a poskytuje webové rozhraní umožňující vytvářet uživatele a přiřazovat jim role.[zdroj?]
Mnoho webových frameworků vytváří jednotné API pro databázový backend, což umožňuje webovým aplikacím pracovat s různými databázemi bez změn kódu a programátorům pracovat s koncepty vyšších úrovní. Některé objektově orientované frameworky navíc obsahují zobrazovací nástroje pro objektově relační mapování, které převádí objekty na uspořádané n-tice.[26]
Některé frameworky minimalizují konfiguraci webových aplikace použitím typové introspekce případně využíváním smluvených konvencí. Mnoho javových frameworků například používá jako vrstvu persistence Hibernate, který může v době běhu generovat databázové schéma schopné uchovávat nezbytné informace. To umožňuje návrháři aplikací navrhovat obchodní objekty bez potřeby explicitně definovat databázové schéma. Frameworky jako Ruby on Rails mohou také fungovat opačně, tj. definovat vlastnosti modelových objektů za běhu na základě databázového schématu.[26]
Webové frameworky mohou poskytovat také podporu transakcí[27] a nástroje pro migraci databází.[26]
Mapování URL nebo směrování URL adres je mechanismus, kterým framework interpretuje URL. Některé frameworky např. Drupal nebo Django porovnávají zadané URL s předem stanovenými vzory pomocí regulárních výrazů, zatímco jiné používají techniky přepisování na převod zadaného URL na tvar, který podkladový stroj rozpozná. Jinou technikou je průchod grafem, který se používá např. v Zope, kde URL je rozkládáno po krocích, které procházejí objektový graf (modelů a pohledů).[zdroj?]
Systém mapování adres URL, který pro směrování a zpracování požadavků používá porovnávání vzorů nebo přepisování, umožňuje používat kratší „přívětivější URL“, což zvyšuje přehlednost webu a umožňuje lepší indexaci vyhledávači. Například URL, které končí /page.cgi?cat=science&topic=physicst
by mohlo být nahrazeno jednoduchým /page/science/physics
. Taková URL jsou snáze zapamatovatelná a poskytují vyhledávačům lepší informace o struktuře webu. Přístup založený na průchodu grafem také vede k vytváření přátelských URL. Kratší URL např. /page/science
je často implicitní hodnota dalšího URL /page/science/physics
.[zdroj?]
Ajax je zkratka „Asynchronous JavaScript and XML“, používaná pro techniku vývoje a vytváření webových aplikací. Jeho záměrem je zvýšit interaktivitu WWW stránek tím, že si v pozadí vyměňují malá množství dat se serverem tak, aby se celá WWW stránka nemusela načítat pokaždé, když uživatel požaduje změnu. Cílem je zvýšení rychlosti, interaktivity, udržovatelnosti a použitelnosti webových stránek.[28]
Kvůli složitosti programování Ajaxu v JavaScriptu existuje množství Ajax frameworků, které jsou založeny výhradně na podpoře Ajaxu. Některé ajaxové frameworky jsou dokonce zabudovány do větších frameworků. Například JavaScriptová knihovna JQuery je součástí Ruby on Rails.[zdroj?]
Se zvýšeným zájmem o vývoj bohatých WWW aplikací „Web 2.0“ se složitost programování přímo v Ajaxu a JavaScriptu projevuje natolik, že nastoupila technologie překladačů, které vývojářům umožňují psát kód ve vyšších programovacích jazycích, např. v Javě, Pythonu nebo Ruby. Prvním z těchto překladačů byl Morfik, pak Google Web Toolkit a po nějaké době následovaly porty do Pythonu a Ruby ve formě Pyjs a RubyJS. Díky těmto překladačům a si nimi poskytovaným knihovnám widgetů se vývoj bohatý mediálních aplikací v Ajaxu mnohem více podobá vývoji desktopových aplikací.[zdroj?]
Některé frameworky poskytují nástroje pro vytváření a poskytování webových služeb. Tyto programy mohou poskytovat podobné nástroje jako ostatní webové aplikace.[29]
Několik novějších frameworků používajících Web 2.0 REST poskytuje infrastrukturu architektury orientované na prostředky (anglicky Resource-oriented architecture, ROA) pro vytváření kolekce prostředků ve stylu ontologie sémantického webu založené na konceptech Resource Description Framework (RDF).[zdroj?]
V tomto článku byl použit překlad textu z článku Web framework na anglické Wikipedii.