Webový server / Reverzní proxy (např. Nginx, Apache)
Routing (Směrování):
Middleware (Filtry):
Byznys logika:
Generování odpovědi:
Apache HTTP
Nginx
In-memory
Filesystem
Databáze
(Zkrácená verze z otázky 17 TWA - HTTP Stavové kódy a 17 TWA - Historie HTTP verzí)
HTTP/0.9
GET metodaHTTP/1.0
HTTP/1.1
Host (kvůli VirtualHost, více domén na jedné IP)HTTP/2
HTTP/3
100 Continue)Thin-client / Smart-server
Thick-client / Dumb-server
(Více viz otázka 12 SWI - Třívrstvá architektura)
Separace odpovědnosti rozdělení aplikace do logických vrstev.
Každá vrstva má specifickou roli a komunikuje se sousedními vrstvami
Cílem je abstrakce a snížení závislostí mezi částmi systému
Příklad typické třívrstvé architektury:
Výhody:
Nevýhody:
Celá aplikace je vyvíjena a nasazována jako jedna nedělitelná jednotka.
Všechny komponenty (UI, business logika, přístup k datům) jsou úzce propojeny a běží v jednom “procesu”.
Výhody*:
Nevýhody*:
Aplikace dekomponovaná na sadu malých, nezávisle nasaditelných služeb.
Jednotlivé služby jsou zodpovědné za specifickou business logiku (i např. s vlastní DB)
Komunikace mezi službami probíhá přes síť pomocí lehkých protokolů (HTTP/REST, gRPC)
Výhody*:
Nevýhody*:
(Více viz 12 SWI - MVC)
Rozděluje prezentační vrstvu (data, UI a řídící logiku) na tři vzájemně propojené komponenty
Model - Reprezentuje data aplikace a business logiku. Je zodpovědný za správu dat, jejich validaci a operace nad nimi. Nezávisí na View ani Controlleru.
View (Pohled) - Zodpovídá za prezentaci dat uživateli. Získává data z Modelu (často prostřednictvím Controlleru) a zobrazuje je. Neměl by obsahovat business logiku.
Controller (Ovladač) - Přijímá vstupy od uživatele (z View), interpretuje je a provádí odpovídající akce. Manipuluje s Modelem (např. aktualizuje data) a vybírá View pro zobrazení odpovědi.
Typický tok dat
Varianta MVC, která se snaží ještě více oddělit View od Modelu a zlepšit testovatelnost prezentační logiky.
Model - Stejná role jako v MVC.
View - Pasivnější než v MVC. Definuje rozhraní pro zobrazování dat a zachytávání uživatelských událostí, ale neobsahuje logiku. Deleguje zpracování událostí na Presenter.
Presenter - Obsahuje prezentační logiku. Reaguje na události z View, získává data z Modelu a aktualizuje View prostřednictvím jeho rozhraní. View a Model spolu napřímo nekomunikují.
Typický tok dat
Konkrétní implementace IoC
Závislosti (objekty, které třída potřebuje ke své funkci) nejsou vytvářeny vně třídy, ale “injektovány” externím systémem.
Typy
(Viz 12 SWI - GRASP vzory)
Sada principů a vzorů pro přidělování odpovědností objektům v OOP
Low Coupling (Nízká provázanost): Minimalizovat závislosti mezi třídami. Změna v jedné třídě by měla mít co nejmenší dopad na ostatní.
High Cohesion (Vysoká soudržnost): Třída by měla mít jasně definovanou, úzce související sadu odpovědností. Všechny její metody a atributy by měly směřovat k jednomu cíli.
(Viz 12 SWI - GoF vzory)
Katalog konkrétních, osvědčených řešení
Poskytují hotové šablony pro řešení často se vyskytujících problémů
Creational
Behavioral
Structural
$article = Article::load( 42 );
$article->title = "...";
$article->save();
article = $mapper->load( 42 );
$article->title = "...";
$mapper->save( $article );
Sleduje změny provedené na objektech během business transakce a koordinuje zápis těchto změn do databáze jako jednu atomickou operaci
(typicky na konci transakce pomocí metody flush())
Fronta změn
Změny se provedou najednou
$article = new Article( "..." );
$manager->persist( $article ); // add new article
$manager->remove( $article2 ); // remove from db
$manager->flush(); // save changes into database
Representational State Transfer
Architektonický styl pro tvorbu aplikačních rozhraní (API)
Sada pravidel a doporučení, jak by měly dva systémy (např. mobilní aplikace a backendový server) komunikovat po síti pomocí protokolu HTTP
Client-server - Klient se stará o uživatelské rozhraní a UX, server se stará o data a business logiku.
Bezstavovost
Místo toho, aby server řídil tok aplikace tím, že by si uživatele vodil krok za krokem, tak server vezme data z databáze, vytvoří z nich reprezentaci (JSON) a tento stav přenese (Transfer) ke klientovi.
Když klient chce stav změnit (např. upravit své jméno v profilu), upraví si tuto reprezentaci u sebe a pošle kompletní nový stav zpět na server, aby si ho server uložil.
Zdroje (Resources) - Data, se kterými pracujeme (např. uživatel, článek, objednávka)
Aby se tato bezstavová výměna dat dala dobře a jednotně řídit, využívá REST naplno standardní metody protokolu HTTP.
Adresa (URL) ukazuje na to, s čím manipulujeme, a metoda určuje, co s tím děláme:
GET /uzivatele: Zobrazí pole všech uživatelů.
GET /uzivatele/42: Zobrazí aktuální stav uživatele 42.
POST /uzivatele: Vytvoří nového uživatele s tímto počátečním stavem.
PUT /uzivatele/42: Kompletně přepíše stávajícího uživatele novým stavem.
DELETE /uzivatele/42: Smaže tento zdroj (a tím zruší jeho stav).
Hypermedia as the Engine of Application State
Klient by měl být schopen navigovat aplikací a objevovat dostupné akce pouze na základě informací (hypermediálních odkazů a formulářů) obsažených v reprezentacích zdrojů vrácených serverem.
Server vede klienta skrze možné stavy aplikace pomocí odkazů.
To umožňuje serveru vyvíjet API nezávisle na klientovi.
Implementace
href), vztah (rel - popisuje sémantiku odkazu) a případně další atributy (např. podporované metody).Příklad:
GET /orders/123_links (nebo podobnou, je to konvence), která klientovi říká, co může dál dělat.{
"id": 123,
"status": "awaiting_payment",
"total_price": "1500",
"currency": "CZK",
"items":,
"_links": {
"self": {
"href": "/orders/123",
"method": "GET"
},
"pay": {
"href": "/orders/123/payment",
"method": "POST",
"description": "Provést platbu objednávky."
},
"cancel": {
"href": "/orders/123/cancellation",
"method": "POST",
"description": "Zrušit objednávku."
},
"customer": {
"href": "/customers/56"
}
}
}
Vytvořeno: 20. 6. 2026, 22:38
Poslední aktualizace: 20. 6. 2026, 23:46