Generování HTML jako API: server vrací pouze text
Webový server je jednoduchý: na HTTP požadavky vracíte text ve formátu HTML. Toto základní, odolné řešení nevyžaduje žádné dodatečné závislosti. Prohlížeč sám provede celou složitou práci při vykreslování.
Příklad minimálního Pythonového serveru pomocí vestavěného modulu http.server. Odpovídá statickou HTML stránkou na každý GET požadavek:
from http.server import BaseHTTPRequestHandler, HTTPServer
WEBPAGE = "<h1>Pythonová stránka!</h1>\n"
class HTMLServer(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(str.encode(WEBPAGE))
webServer = HTTPServer(("localhost", 8080), HTMLServer)
print("Server běží na http://localhost:8080")
webServer.serve_forever()
Pomocí curl vidíte čistý text:
$ curl localhost:8080
<h1>Pythonová stránka!</h1>
V prohlížeči se značka <h1> převede na formátovaný nadpis. Přidejte CSS pro stylování:
WEBPAGE = """
<style>
body {
background-color: lightblue;
font-family: 'Comic Sans MS', cursive;
}
</style>
<h1>Pythonová stránka!</h1>
"""
Prohlížeč automaticky aplikuje styly.
Vykreslování je úloha prohlížeče
Server generuje text, prohlížeč jej analyzuje do DOM, vypočítá layout, aplikuje písma s ohledem na DPI, kerning a metriky. Jedná se o mnohoúrovňový proces: analýza, výpočet stylů, layout, vykreslení.
Implementace vykreslování vyžaduje hluboké znalosti typografie — od převodu pt na px až po výšku ascenderu a descenderu písmen. Prohlížeče to za vás vyřeší.
Generování HTML jsou řetězcové operace. Nemusíte používat termín „server-side rendering“, který naznačuje komplikovanost.
HTML pro zobrazení dat
Libovolná data lze vyjádřit jako HTML prostřednictvím řetězcových šablon. Příklad s okresy New Yorku:
boroughs = [
"The Bronx",
"Manhattan",
"Brooklyn",
"Queens",
"Staten Island"
]
LIST = "<li>".join(boroughs)
WEBPAGE = "<h1>Okresy NYC</h1><ul><li>" + LIST + "</ul>"
Výsledek správně analyzuje prohlížeč, i když chybí </li> (HTML5 je tolerantní).
Stejně tak pro JSON:
LIST = '","'.join(boroughs)
WEBPAGE = '{ "nyc_boroughs": ["' + LIST + '"] }'
HTML je výhodnější: integrované nástroje pro hypertext (odkazy, formuláře) bez nutnosti klientského JavaScriptu.
- Výhody řetězcového generování HTML:
- Funguje na jakémkoli jazyce bez knihoven.
- Minimální overhead.
- Snadné ladění: curl ukáže surový výstup.
- Křížová platforma (bash, awk, Python).
HTML API místo JSON API
Nazývejte to „HTML API“: server vrací HTML namísto JSON. Prohlížeč je klient, který interpretuje hypertext.
Srovnání:
HTML:
<h1>Okresy NYC</h1>
<ul>
<li>The Bronx
<li>Manhattan
<li>Brooklyn
<li>Queens
<li>Staten Island
</ul>
JSON:
{
"nyc_boroughs": [
"The Bronx",
"Manhattan",
"Brooklyn",
"Queens",
"Staten Island"
]
}
HTML obsahuje jak data, tak jejich zobrazení. JSON obsahuje pouze data a vyžaduje klientskou logiku.
Šablony pro produkční prostředí
Pro reálné služby použijte šablonovací systémy jako Jinja2. Zajišťují escapování, cykly, dědičnost.
Příklad s Jinja:
<h1>Okresy NYC</h1>
<ul>
{% for borough in boroughs %}
<li>{{ borough }}
{% endfor %}
</ul>
- Klíčové výhody šablonovacích systémů:
1. Automatické escapování HTML proti XSS.
2. Opakované používání fragmentů (partials).
3. Přirozený syntax pro jazyk (Htmx pro Rust, Zig).
4. Bezstavovost: snadné testování a ladění.
5. Žádný overhead hydratace jako u SPA.
Na rozdíl od Reactu, kde se JSON hydraulizuje do DOM na klientovi, šablony generují hotový HTML na serveru.
Co je důležité
- Server generuje text HTML – prohlížeč ho vykresluje.
- HTML API: hypertext místo holých dat JSON.
- Řetězcové operace fungují všude, bez frameworků.
- Šablonovací systémy přidávají escapování a strukturu.
- Přístup se škáluje na libovolný programovací jazyk.
— Editorial Team
Zatím žádné komentáře.