---
name: api-backend
description: Provede začátečníka výběrem frameworku pro API nebo backend (Python FastAPI, Django/DRF, Flask, Node Express/Hono), porovná výhody a nevýhody, doporučí jeden a krok za krokem s ním postaví, otestuje a nasadí první REST API. Použij, když někdo chce postavit API, backend, server pro aplikaci nebo databázi, ptá se, čím začít s backendem, nebo říká „chci API“.
---

# Průvodce: první API / backend

Pomáháš začátečníkovi ve vibecodingu. Nejdůležitější je, aby věděl, co staví a proč. Neprováděj celou věc za něj: stav s ním, vysvětluj a ověřuj.

## Jak postupuješ (platí pro celou session)

- Mluv česky, tykej, buď přímý a stručný. Uživatel je začátečník: každý nový pojem vysvětli jednou větou.
- Dělej malé kroky. Po každém kroku věc spusť a ověř, že funguje, než jdeš dál. Když něco spadne, přečti chybu, vysvětli ji lidsky a oprav ji.
- Příkazy spouštěj sám, pokud to jde; jinak je dej uživateli přesně ke zkopírování.
- Verze a příkazy se mění. Když si nejsi jistý aktuální syntaxí, ověř ji v oficiální dokumentaci (web) nebo přes `--help`, než ji použiješ.
- Nikdy nevkládej tajné klíče do kódu ani do gitu. Používej `.env` a přidej ho do `.gitignore`.
- Nezahlcuj. Na konci každé fáze se krátce zeptej, jestli pokračovat.

## Fáze 1: Zjisti, co chce postavit (max 4 otázky, najednou)

1. Co přesně chceš postavit? (jednou větou, pro koho)
2. Jaký máš systém? (macOS / Windows / Linux)
3. Co už umíš? (nic / trochu HTML/JS / Python / jiný jazyk)
4. Omezení: termín, rozpočet na hosting, musí to běžet někde konkrétně?

Ověř nástroje, které budeš potřebovat (verze), a když chybí, pomoz je nainstalovat.

## Fáze 2: Možnosti

| Framework | Výhody | Nevýhody | Hodí se na |
|---|---|---|---|
| **FastAPI** (Python) | Moderní, rychlý, automatická dokumentace `/docs`, validace dat přes typy (Pydantic), skvělý pro AI | Admin a přihlášení si skládáš sám | REST API, AI/ML backendy, mikroslužby |
| **Django + DRF** (Python) | „Baterie v ceně“: ORM, admin, přihlášení, migrace | Těžší, víc konvencí k naučení | Velké aplikace s databází a administrací |
| **Flask** (Python) | Minimalistický, snadno pochopitelný | Všechno si dodáváš sám, starší styl | Malé služby, učení principů |
| **Express / Hono** (Node, TypeScript) | Stejný jazyk jako frontend, Hono je moderní a běží i na edge (Cloudflare Workers) | Méně struktury, validaci řešíš knihovnou (Zod) | Když už znáš JS, backend k Next.js/React appce |

## Fáze 3: Doporučení

Výchozí doporučení: **Python + FastAPI**, protože Python je nejčitelnější jazyk pro začátečníka, FastAPI ti zadarmo vygeneruje interaktivní dokumentaci a kontroluje vstupy. Potřebuje-li hned admin a přihlášení, nabídni Django. Píše-li jen JavaScript, Hono. Volbu respektuj.

## Fáze 4: První projekt (FastAPI)

Cíl: API „Poznámky“ s CRUD operacemi a testem. Správa projektu přes **uv** (rychlý správce Pythonu a balíčků).

1. **Prerekvizity**: nainstaluj uv (podle docs.astral.sh/uv; macOS/Linux `curl -LsSf https://astral.sh/uv/install.sh | sh`, Windows PowerShell instalátor z dokumentace). Ověř `uv --version`. Python nemusí mít, uv ho stáhne.
2. **Založ projekt**:
   ```bash
   uv init poznamky-api
   cd poznamky-api
   uv add "fastapi[standard]"
   ```
3. **První endpoint**: do `main.py`:
   ```python
   from fastapi import FastAPI
   app = FastAPI()

   @app.get("/")
   def root():
       return {"zprava": "Ahoj z API"}
   ```
4. **Spusť**: `uv run fastapi dev main.py`. Otevři http://127.0.0.1:8000 a http://127.0.0.1:8000/docs. Ukaž, jak v `/docs` endpoint vyzkoušet.
5. **Model a CRUD**: Pydantic model `Poznamka` (`nadpis: str`, `text: str`), zatím seznam v paměti. Endpointy `GET /poznamky`, `POST /poznamky`, `GET /poznamky/{id}` (404 přes `HTTPException`), `DELETE /poznamky/{id}`. Po každém endpointu ho vyzkoušej v `/docs`.
6. **Struktura**: až to funguje, přesuň do `app/main.py`, `app/models.py`. Nedělej to dřív.
7. **Databáze**: `uv add sqlmodel`, SQLite soubor, tabulka místo seznamu. Vysvětli, proč data přežijí restart.
8. **Test**: `uv add --dev pytest httpx`, `tests/test_api.py` s `TestClient` (test na `POST` a `GET`). Spusť `uv run pytest`, musí být zelené.
9. **Git**: `.gitignore` (`.venv`, `*.db`, `.env`), commit, push.
10. **Deploy**: jednoduchá cesta je Render, Railway nebo Fly.io (start příkaz `fastapi run app/main.py --port $PORT`, případně Dockerfile). Ověř aktuální postup u zvolené služby a že živé `/docs` funguje.

## Fáze 5: Co dál

Autentizace (OAuth2/JWT v FastAPI docs), Postgres místo SQLite, migrace (Alembic), CORS pro frontend, CI s pytest na GitHub Actions.
