SlideShare a Scribd company logo
1 of 17
Download to read offline
HTML PO DRÁTĚ
Alternativa k MPA a SPA
Na počátku…
Na počátku stvořil Bůh server a klient…
HTTP: Hypertext Transfer Protocol
GET /udalost/dev-ctvrtkon-107 HTTP/2.0
:authority: ctvrtkon.cz
HTTP/2.0 200 OK
<html>
…
</html>
GET /contacts
POST /contacts
GET /contacts/1
PUT /contacts/1
DELETE /contacts/1
Hypertext
- Nelineární text propojený
pomocí hyperlinků (odkazů)
Hypermedia
- Obrázky
- Videa
- Formuláře
- Tlačítka
- Navigační prvky
- atd
HTML: Hypertext Markup Language
<a href="https://ctvrtkon.cz">Nejlepší akce!</a>
<form action="/login" method="post">
<label for="email">Email</label>
<input type="email" name=”email” id="email" /><br />
<label for="password">Heslo</label>
<input type="password" name=”password” id="password" /><br />
<button type="submit">Přihlásit</button>
</form>
GET / HTTP/2.0
:authority: ctvrtkon.cz
POST /login HTTP/2.0
email=john.doe%40example.com&password=password
MPA: Multi-page Application
- Každý request způsobí
přenačtení celé stránky
- Request obsahuje
formulářová data, response
obsahuje HTML
- Stav není zachován mezi
stránkami (téměř)
- Komunikace probíhá
synchronně
- UI je poskytnuto serverem,
klient ho pouze vykresluje
- Web 1.0
SPA: Single-page application
- Při prvním načtení se načte
celá aplikace
- Request i response obsahuje
JSON
- Stav aplikace je perzistentní
- Komunikace probíhá
asynchronně
- Server poskytuje pouze
data, UI z nich staví
klientská aplikace
- Web 2.0
MPA vs SPA
Výhody:
- Jednoduchost
- SEO
- Malá zátěž na klienta
- Možnosti jazyka a frameworku
Nevýhody:
- Ztráta stavu
- Velikost přenesených dat
- Méně interaktivní
- Omezené možnosti HTML
Výhody:
- Interaktivita
- Perzistentní stav
- Menší množství přenesených dat
- DX
Nevýhody:
- Komplexita
- Prvotní načtení
- Chování linků a navigace
- SEO
- Závislost na JavaScript ekosystému
MPA vs SPA: use cases
- Velmi jednoduché weby
- Statické weby
- Weby bohaté na obsah (news, blogs
etc.)
- Weby s nižší interaktivitou
- Weby vyžadující dobré SEO
- Weby s vysokou interaktivitou
- Weby s “feelem” mobilní aplikace
(animace, hladkost)
- Funkční aplikace vyžadující stav
- Weby vyžadující oprávnění, kde není
SEO důležité
HDA: Jak to funguje
- Prvotní stránka může být plně vykreslená, nebo jen kostra
- Requesty na server jsou odeslány asynchronně bez přenačtení
stránky
- Response obsahuje HTML, které klient rovnou vykreslí
- Přenačítají se pouze ty části stránky, které vyžadují update
HDA: Hypermedia Driven Application
- Request obsahuje formulářová data,
response obsahuje HTML
- UI je poskytnuto serverem, klient ho
pouze vykresluje
- Nenačítá se velká JavaScriptová
aplikace
- Interakce nezpůsobí přenačtení celé
stránky
- Stav je zachován
- Komunikace probíhá asynchronně
HDA: Výhody a nevýhody
Výhody:
- Jednoduchost
- SEO
- Možnost volby jazyka a frameworku
- Malá zátěž na klienta
- Menší množství přenesených dat
- Interaktivita
- Perzistentní stav
Nevýhody:
- Omezené možnosti offline
- Méně rozšířené paradigma
- Menší možnosti interakce a animace
než SPA
- O něco málo komplexnější než MPA
HDA: Kde ji vezmu?
Laravel: Livewire
Ruby on Rails: Hotwire
Phoenix: LiveView
Všechno ostatní: HTMX
Honorable mention: Unpoly
Mobile: Hyperview/Hotwire
A co SSR atd.?
SSR: Server-side rendering
- Aplikace je psána ve stylu SPA
- Na serveru běží Node, který za běhu
vytváří HTML dynamicky
- JavaScript pro interaktivitu je dodán
následně
- Server-side logic je možné mít přímo
v aplikaci, nebo mít samostatný
backend
- Next, Nuxt, SvelteKit, Astro
- Existují další varianty
Nevýhody oproti HDA:
- Komplexita (ještě větší než u SPA)
- Zamčení do JS ekosystému
Kam dál?
Demo aplikace použitá během prezentace: geeshta/contax
Kniha a e-kniha: Hypermedia.systems
Esej o komplexitě: The Grug Brained Developer
Video o typech webových aplikací: 10 Rendering Patterns for Web Apps
Video o tzv. Transitional Web Apps: Have Single-Page Apps Ruined the Web?
Dizertační práce, která představila koncepty jako je REST a HATEOAS:
Architectural Styles and the Design of Network-based Software Architectures
Litestar
- Relativně nový webový framework
pro Python
- Podporuje APIs, MPAs i HTMX
- Podporuje moderní Python - type
annotations, async/await, DI etc.
- Obsahuje spoustu funkcionalit
out-of-the-box
- Stále se vyvíjí a má skvělou
komunitu
Officiální Web
GitHub
Discord pozvánka

More Related Content

Similar to DEV Čtvrtkon #107 - Štefan Földesi

Vytvořeno pro SEO (Designed for SEO)
Vytvořeno pro SEO (Designed for SEO)Vytvořeno pro SEO (Designed for SEO)
Vytvořeno pro SEO (Designed for SEO)Pavel Ungr
 
Pavel ungr designed_for_seo
Pavel ungr designed_for_seoPavel ungr designed_for_seo
Pavel ungr designed_for_seoH1.cz
 
Glami - jak řešíme performance, aneb jak neshodit web TV reklamou
Glami - jak řešíme performance, aneb jak neshodit web TV reklamouGlami - jak řešíme performance, aneb jak neshodit web TV reklamou
Glami - jak řešíme performance, aneb jak neshodit web TV reklamouPetr Bechyně
 
moderni webapp - frontend
moderni webapp - frontendmoderni webapp - frontend
moderni webapp - frontendTomas Hodbod
 
Co sledovat a jak měřit u mobilního webu
Co sledovat a jak měřit u mobilního webuCo sledovat a jak měřit u mobilního webu
Co sledovat a jak měřit u mobilního webuAkce Dobrého webu
 
Generátory statických webů
Generátory statických webůGenerátory statických webů
Generátory statických webůMichal Doležel
 
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)Jakub Kulhan
 
Nejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webůNejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webůVladimír Smitka
 
06 prez10(tvorba webu)
06 prez10(tvorba webu)06 prez10(tvorba webu)
06 prez10(tvorba webu)olc_user
 
Google Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPressGoogle Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPressVladimír Smitka
 
CMS - start presentatation
CMS - start presentatationCMS - start presentatation
CMS - start presentatationDAvid Frýbert
 
Honza Doleček - Jak používáme NewRelic Posobota 2013-05
Honza Doleček - Jak používáme NewRelic Posobota 2013-05Honza Doleček - Jak používáme NewRelic Posobota 2013-05
Honza Doleček - Jak používáme NewRelic Posobota 2013-05PeckaDesign.cz
 

Similar to DEV Čtvrtkon #107 - Štefan Földesi (20)

TNPW2-2016-05
TNPW2-2016-05TNPW2-2016-05
TNPW2-2016-05
 
Vytvořeno pro SEO (Designed for SEO)
Vytvořeno pro SEO (Designed for SEO)Vytvořeno pro SEO (Designed for SEO)
Vytvořeno pro SEO (Designed for SEO)
 
Pavel ungr designed_for_seo
Pavel ungr designed_for_seoPavel ungr designed_for_seo
Pavel ungr designed_for_seo
 
TNPW2-2013-02
TNPW2-2013-02TNPW2-2013-02
TNPW2-2013-02
 
Glami - jak řešíme performance, aneb jak neshodit web TV reklamou
Glami - jak řešíme performance, aneb jak neshodit web TV reklamouGlami - jak řešíme performance, aneb jak neshodit web TV reklamou
Glami - jak řešíme performance, aneb jak neshodit web TV reklamou
 
moderni webapp - frontend
moderni webapp - frontendmoderni webapp - frontend
moderni webapp - frontend
 
TNPW2-2014-05
TNPW2-2014-05TNPW2-2014-05
TNPW2-2014-05
 
Co sledovat a jak měřit u mobilního webu
Co sledovat a jak měřit u mobilního webuCo sledovat a jak měřit u mobilního webu
Co sledovat a jak měřit u mobilního webu
 
Generátory statických webů
Generátory statických webůGenerátory statických webů
Generátory statických webů
 
TNPW2-2016-02
TNPW2-2016-02TNPW2-2016-02
TNPW2-2016-02
 
TNPW2-2014-02
TNPW2-2014-02TNPW2-2014-02
TNPW2-2014-02
 
Lotus Notes 7
Lotus Notes 7Lotus Notes 7
Lotus Notes 7
 
HTTP/2
HTTP/2HTTP/2
HTTP/2
 
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
 
Nejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webůNejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webů
 
06 prez10(tvorba webu)
06 prez10(tvorba webu)06 prez10(tvorba webu)
06 prez10(tvorba webu)
 
Google Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPressGoogle Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPress
 
CMS - start presentatation
CMS - start presentatationCMS - start presentatation
CMS - start presentatation
 
TNPW2-2012-02
TNPW2-2012-02TNPW2-2012-02
TNPW2-2012-02
 
Honza Doleček - Jak používáme NewRelic Posobota 2013-05
Honza Doleček - Jak používáme NewRelic Posobota 2013-05Honza Doleček - Jak používáme NewRelic Posobota 2013-05
Honza Doleček - Jak používáme NewRelic Posobota 2013-05
 

More from Ctvrtkoncz

#85 Čtvrtkon - Obsahové UX - Milan Pichlík
#85 Čtvrtkon - Obsahové UX - Milan Pichlík#85 Čtvrtkon - Obsahové UX - Milan Pichlík
#85 Čtvrtkon - Obsahové UX - Milan PichlíkCtvrtkoncz
 
DEV Čtvrtkon #76 - Open API
DEV Čtvrtkon #76 - Open APIDEV Čtvrtkon #76 - Open API
DEV Čtvrtkon #76 - Open APICtvrtkoncz
 
DEV Čtvrtkon #76 - Makefile
DEV Čtvrtkon #76 - MakefileDEV Čtvrtkon #76 - Makefile
DEV Čtvrtkon #76 - MakefileCtvrtkoncz
 
DEV Čtvrtkon #76 - nopCommerce
DEV Čtvrtkon #76 - nopCommerceDEV Čtvrtkon #76 - nopCommerce
DEV Čtvrtkon #76 - nopCommerceCtvrtkoncz
 
DEV Čtvrtkon #76 - Fluent Interface
DEV Čtvrtkon #76 - Fluent InterfaceDEV Čtvrtkon #76 - Fluent Interface
DEV Čtvrtkon #76 - Fluent InterfaceCtvrtkoncz
 
DEV Čtvrtkon #76 - Nachytřená domácnost
DEV Čtvrtkon #76 - Nachytřená domácnostDEV Čtvrtkon #76 - Nachytřená domácnost
DEV Čtvrtkon #76 - Nachytřená domácnostCtvrtkoncz
 
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheelsDEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheelsCtvrtkoncz
 
Čtvrtkon: Podle jakých kritérií vybrat e-shopové řešení
Čtvrtkon: Podle jakých kritérií vybrat e-shopové řešeníČtvrtkon: Podle jakých kritérií vybrat e-shopové řešení
Čtvrtkon: Podle jakých kritérií vybrat e-shopové řešeníCtvrtkoncz
 
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & MicrosevicesČtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & MicrosevicesCtvrtkoncz
 
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptČtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptCtvrtkoncz
 
Čtvrtkon #64 - AWS Serverless - Michal Haták
Čtvrtkon #64 - AWS Serverless - Michal HatákČtvrtkon #64 - AWS Serverless - Michal Haták
Čtvrtkon #64 - AWS Serverless - Michal HatákCtvrtkoncz
 
Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...
Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...
Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...Ctvrtkoncz
 
Pravdy a lži o reklamě na Facebooku - Lukáš Chládek
Pravdy a lži o reklamě na Facebooku - Lukáš ChládekPravdy a lži o reklamě na Facebooku - Lukáš Chládek
Pravdy a lži o reklamě na Facebooku - Lukáš ChládekCtvrtkoncz
 
Vilibald Wanča - Api design-lifecycle
Vilibald Wanča - Api design-lifecycleVilibald Wanča - Api design-lifecycle
Vilibald Wanča - Api design-lifecycleCtvrtkoncz
 
Jan Kaštánek - Od webových aplikací k Androidu
Jan Kaštánek - Od webových aplikací k AndroiduJan Kaštánek - Od webových aplikací k Androidu
Jan Kaštánek - Od webových aplikací k AndroiduCtvrtkoncz
 
Propagace eshopu v praxi - Čtvrtkon
Propagace eshopu v praxi - ČtvrtkonPropagace eshopu v praxi - Čtvrtkon
Propagace eshopu v praxi - ČtvrtkonCtvrtkoncz
 

More from Ctvrtkoncz (16)

#85 Čtvrtkon - Obsahové UX - Milan Pichlík
#85 Čtvrtkon - Obsahové UX - Milan Pichlík#85 Čtvrtkon - Obsahové UX - Milan Pichlík
#85 Čtvrtkon - Obsahové UX - Milan Pichlík
 
DEV Čtvrtkon #76 - Open API
DEV Čtvrtkon #76 - Open APIDEV Čtvrtkon #76 - Open API
DEV Čtvrtkon #76 - Open API
 
DEV Čtvrtkon #76 - Makefile
DEV Čtvrtkon #76 - MakefileDEV Čtvrtkon #76 - Makefile
DEV Čtvrtkon #76 - Makefile
 
DEV Čtvrtkon #76 - nopCommerce
DEV Čtvrtkon #76 - nopCommerceDEV Čtvrtkon #76 - nopCommerce
DEV Čtvrtkon #76 - nopCommerce
 
DEV Čtvrtkon #76 - Fluent Interface
DEV Čtvrtkon #76 - Fluent InterfaceDEV Čtvrtkon #76 - Fluent Interface
DEV Čtvrtkon #76 - Fluent Interface
 
DEV Čtvrtkon #76 - Nachytřená domácnost
DEV Čtvrtkon #76 - Nachytřená domácnostDEV Čtvrtkon #76 - Nachytřená domácnost
DEV Čtvrtkon #76 - Nachytřená domácnost
 
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheelsDEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
 
Čtvrtkon: Podle jakých kritérií vybrat e-shopové řešení
Čtvrtkon: Podle jakých kritérií vybrat e-shopové řešeníČtvrtkon: Podle jakých kritérií vybrat e-shopové řešení
Čtvrtkon: Podle jakých kritérií vybrat e-shopové řešení
 
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & MicrosevicesČtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
 
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptČtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
 
Čtvrtkon #64 - AWS Serverless - Michal Haták
Čtvrtkon #64 - AWS Serverless - Michal HatákČtvrtkon #64 - AWS Serverless - Michal Haták
Čtvrtkon #64 - AWS Serverless - Michal Haták
 
Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...
Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...
Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...
 
Pravdy a lži o reklamě na Facebooku - Lukáš Chládek
Pravdy a lži o reklamě na Facebooku - Lukáš ChládekPravdy a lži o reklamě na Facebooku - Lukáš Chládek
Pravdy a lži o reklamě na Facebooku - Lukáš Chládek
 
Vilibald Wanča - Api design-lifecycle
Vilibald Wanča - Api design-lifecycleVilibald Wanča - Api design-lifecycle
Vilibald Wanča - Api design-lifecycle
 
Jan Kaštánek - Od webových aplikací k Androidu
Jan Kaštánek - Od webových aplikací k AndroiduJan Kaštánek - Od webových aplikací k Androidu
Jan Kaštánek - Od webových aplikací k Androidu
 
Propagace eshopu v praxi - Čtvrtkon
Propagace eshopu v praxi - ČtvrtkonPropagace eshopu v praxi - Čtvrtkon
Propagace eshopu v praxi - Čtvrtkon
 

DEV Čtvrtkon #107 - Štefan Földesi

  • 2. Na počátku… Na počátku stvořil Bůh server a klient…
  • 3. HTTP: Hypertext Transfer Protocol GET /udalost/dev-ctvrtkon-107 HTTP/2.0 :authority: ctvrtkon.cz HTTP/2.0 200 OK <html> … </html> GET /contacts POST /contacts GET /contacts/1 PUT /contacts/1 DELETE /contacts/1
  • 4. Hypertext - Nelineární text propojený pomocí hyperlinků (odkazů)
  • 5. Hypermedia - Obrázky - Videa - Formuláře - Tlačítka - Navigační prvky - atd
  • 6. HTML: Hypertext Markup Language <a href="https://ctvrtkon.cz">Nejlepší akce!</a> <form action="/login" method="post"> <label for="email">Email</label> <input type="email" name=”email” id="email" /><br /> <label for="password">Heslo</label> <input type="password" name=”password” id="password" /><br /> <button type="submit">Přihlásit</button> </form> GET / HTTP/2.0 :authority: ctvrtkon.cz POST /login HTTP/2.0 email=john.doe%40example.com&password=password
  • 7. MPA: Multi-page Application - Každý request způsobí přenačtení celé stránky - Request obsahuje formulářová data, response obsahuje HTML - Stav není zachován mezi stránkami (téměř) - Komunikace probíhá synchronně - UI je poskytnuto serverem, klient ho pouze vykresluje - Web 1.0
  • 8. SPA: Single-page application - Při prvním načtení se načte celá aplikace - Request i response obsahuje JSON - Stav aplikace je perzistentní - Komunikace probíhá asynchronně - Server poskytuje pouze data, UI z nich staví klientská aplikace - Web 2.0
  • 9. MPA vs SPA Výhody: - Jednoduchost - SEO - Malá zátěž na klienta - Možnosti jazyka a frameworku Nevýhody: - Ztráta stavu - Velikost přenesených dat - Méně interaktivní - Omezené možnosti HTML Výhody: - Interaktivita - Perzistentní stav - Menší množství přenesených dat - DX Nevýhody: - Komplexita - Prvotní načtení - Chování linků a navigace - SEO - Závislost na JavaScript ekosystému
  • 10. MPA vs SPA: use cases - Velmi jednoduché weby - Statické weby - Weby bohaté na obsah (news, blogs etc.) - Weby s nižší interaktivitou - Weby vyžadující dobré SEO - Weby s vysokou interaktivitou - Weby s “feelem” mobilní aplikace (animace, hladkost) - Funkční aplikace vyžadující stav - Weby vyžadující oprávnění, kde není SEO důležité
  • 11. HDA: Jak to funguje - Prvotní stránka může být plně vykreslená, nebo jen kostra - Requesty na server jsou odeslány asynchronně bez přenačtení stránky - Response obsahuje HTML, které klient rovnou vykreslí - Přenačítají se pouze ty části stránky, které vyžadují update
  • 12. HDA: Hypermedia Driven Application - Request obsahuje formulářová data, response obsahuje HTML - UI je poskytnuto serverem, klient ho pouze vykresluje - Nenačítá se velká JavaScriptová aplikace - Interakce nezpůsobí přenačtení celé stránky - Stav je zachován - Komunikace probíhá asynchronně
  • 13. HDA: Výhody a nevýhody Výhody: - Jednoduchost - SEO - Možnost volby jazyka a frameworku - Malá zátěž na klienta - Menší množství přenesených dat - Interaktivita - Perzistentní stav Nevýhody: - Omezené možnosti offline - Méně rozšířené paradigma - Menší možnosti interakce a animace než SPA - O něco málo komplexnější než MPA
  • 14. HDA: Kde ji vezmu? Laravel: Livewire Ruby on Rails: Hotwire Phoenix: LiveView Všechno ostatní: HTMX Honorable mention: Unpoly Mobile: Hyperview/Hotwire
  • 15. A co SSR atd.? SSR: Server-side rendering - Aplikace je psána ve stylu SPA - Na serveru běží Node, který za běhu vytváří HTML dynamicky - JavaScript pro interaktivitu je dodán následně - Server-side logic je možné mít přímo v aplikaci, nebo mít samostatný backend - Next, Nuxt, SvelteKit, Astro - Existují další varianty Nevýhody oproti HDA: - Komplexita (ještě větší než u SPA) - Zamčení do JS ekosystému
  • 16. Kam dál? Demo aplikace použitá během prezentace: geeshta/contax Kniha a e-kniha: Hypermedia.systems Esej o komplexitě: The Grug Brained Developer Video o typech webových aplikací: 10 Rendering Patterns for Web Apps Video o tzv. Transitional Web Apps: Have Single-Page Apps Ruined the Web? Dizertační práce, která představila koncepty jako je REST a HATEOAS: Architectural Styles and the Design of Network-based Software Architectures
  • 17. Litestar - Relativně nový webový framework pro Python - Podporuje APIs, MPAs i HTMX - Podporuje moderní Python - type annotations, async/await, DI etc. - Obsahuje spoustu funkcionalit out-of-the-box - Stále se vyvíjí a má skvělou komunitu Officiální Web GitHub Discord pozvánka