Účel a kontext: co znamená bezserverové API
Bezserverové (serverless) API je rozhraní založené na spravovaných cloudových službách, kde aplikace běží v krátkodobých funkcích a platí se primárně za reálné užití. Infrastruktura (škálování, patchování, dostupnost) je abstrahována a automaticky řízena poskytovatelem. Cílem je rychlá iterace, vysoká elasticita a optimalizace nákladů, aniž by byla obětována spolehlivost, bezpečnost a pozorovatelnost.
Architektonické stavebnice
- API brána: ukončení HTTP(S) spojení, směrování na funkce/mikroslužby, throttling, autentizace, metriky, WAF.
- Funkce (FaaS): stateless výpočet (AWS Lambda, Azure Functions, Cloud Functions), spouštěný na vyžádání.
- Datová vrstva: spravované databáze (NoSQL/SQL), fronty a streamy (SQS/SNS, EventBridge, Pub/Sub), objektové úložiště.
- Identity a přístup: správa identity (Cognito/Entra/Identity Platform), OAuth/OIDC, mTLS dle potřeby.
- Observabilita: logy, distribuované trasování, metriky, alarmy a structured events.
Návrhové principy bezserverového API
- Stateless: žádný per-request stav ve funkci; stav uložen do datových služeb nebo krátkodobých cache s vědomím TTL.
- Idempotence: opakovatelné zpracování požadavků (retries). Identifikujte požadavky pomocí requestIdempotencyKey.
- Back-pressure: zvládání špiček pomocí front a asynchronních workflow.
- Least privilege: granularita oprávnění na úrovni funkcí, tabulek, témat a bucketů.
- Konfigurací nad kódem: routy, throttling, CORS a autentizace v API bráně; běhové parametry přes prostředí a feature flags.
API brána: návrh rozhraní, limity a CORS
- Model rozhraní: REST (konzistentní zdrojové cesty a metody), HTTP API (rychlejší a levnější varianty) nebo GraphQL pro agregaci.
- Validace: schémata (OpenAPI/JSON Schema) přímo v bráně; odmítnutí nevalidních payloadů před invokací funkce.
- Rate limiting: globální a per-klíč; vracení kódu 429 s retry politikou a Retry-After hlavičkou.
- Caching: odpovědi dle cache-control, per-route cache; pozor na personalizovaný obsah a tokeny.
- CORS: povolit pouze nezbytné originy, metody a hlavičky; preflight optimalizujte krátkou funkcí nebo přímo konfigurací brány.
Chladné starty, latence a výkon
- Chladné starty: minimalizujte závislosti, používejte menší runtime (např. Node.js/Go), provisioned concurrency pro kritické trasy.
- Warm pooling: recyklujte klienty databáze mimo handler (globální scope), aby připojení přežívala mezi voláními.
- Payloady: komprese GZIP/Brotli, omezení velikosti (uploady přímo do objektového úložiště přes pre-signed URL).
- Regionální blízkost: volte region API a dat blízko uživatelům; u globálních API zvažte edge termination a multi-region active-active provoz.
Autentizace a autorizace
- Standardy: OAuth 2.1/OIDC s JWT nebo PASETO; krátké TTL, rotace klíčů (JWKS), validace audience/issuer.
- Fine-grained access: mapování entit na resource-based politiky v datové vrstvě; claims → ABAC.
- mTLS/API klíče: pro server–server integrace; klíče s omezenými rozsahy přístupu a kvótami.
- Segregace: veřejné a interní endpointy na oddělených doménách a WAF pravidlech.
Data a transakce v bezserverovém světě
- NoSQL vs. SQL: navrhujte přístupové vzory předem; NoSQL pro nízkou latenci a masivní škálování, SQL pro komplexní dotazy a ACID vlastnosti.
- Transakce: pokud chybí distribuované transakce, použijte vzory outbox a saga s kompenzačními akcemi.
- TTL a archivační politiky: automatická expirace záznamů s ohledem na legislativu (GDPR/retence dat).
- Cache: spravované in-memory služby (ElastiCache/Memorystore) pro hot-paths; invalidace pomocí eventů.
Asynchronní zpracování a workflow
- Fronty a témata: oddělení přijetí požadavku od práce na pozadí; garantované doručení, dead-letter fronty, backoff.
- Orchestrace: stavové automaty (Step Functions/Logic Apps/Workflows) s kompenzacemi, timeouts a circuit breakers.
- Event-driven: emitujte doménové události; spotřebitelé vytváří projekce (vyhledávací indexy, analytika).
Bezpečnostní opatření
- WAF a ochrana proti botům: pravidla proti injection, anomálnímu provozu a IP reputation.
- Secret management: KMS/HSM a trezory tajemství; žádné klíče v proměnných prostředí bez šifrování a rotace.
- Výstupní egress: privátní konektivita (VPC endpoints/Private Link) a egress allowlist.
- Audit: záznam všech změn konfigurace brány, funkcí a politik; neměnné logy.
Observabilita a testovatelnost
- Strukturované logy: korelační ID mezi branou, funkcí a databází; žádná citlivá data v logu.
- Trasování: OpenTelemetry; spans přes bránu, funkci, DB a frontu.
- Metriky a SLO: p99 latence per-endpoint, fault rate, chladné starty, saturace concurrency; alerty s multi-window, multi-burn.
- Testy: kontraktační testy na rozhraní, integrační testy v sandbox účtu, chaos testy (selhání závislostí, zvýšená latence).
Řízení verzí a kompatibility
- Versioning:
/v1,/v2nebo content negotiation; zpětná kompatibilita payloadů. - Deploy strategie: canary a postupný rollout, feature flags, automatický rollback na základě chybovosti či latence.
- Kontrakty: OpenAPI jako zdroj pravdy; generované SDK pro klienty.
Náklady a optimalizace
- Unit economics: cena za milion požadavků + GB-s výpočtu + egress; modelujte p99 latenci oproti provisioned concurrency.
- Hot paths: přesun náročných částí do asynchronních pipeline; caching a předvýpočty.
- Agregace požadavků: GraphQL/edge compute snižuje počet vyvolání backendových funkcí.
Edge a globální distribuce
- Edge functions: validace tokenů, A/B routing, jednoduché obohacení blízko uživatelům.
- Multi-region: aktivně-aktivní API s globálním DNS/failoverem; konflikty řešte CRDT/last-write-wins podle domény.
- CDN: cache pro GET; invalidace eventy a ETag/If-None-Match.
API vzory a anti-vzory
- Vzory: request–reply pro synchronní čtení, command–async result pro zápisy, webhook/outbox pro integrace, bulk operace přes joby.
- Anti-vzory: dlouhé synchronní běhy ve funkcích, držení spojení na minuty (preferujte spravované WebSocket služby), chatty klienti místo agregace, sdílené globální proměnné jako stav.
Schéma payloadů a správné kódy
- Kontrakty: explicitní typy, jednotky, enumy; verzování schémat a deprecation pole.
- Kódy: 200/201/202 pro přijetí, 400 validace, 401/403 autorizace, 404 zdroj, 409 konflikt, 429 limit, 5xx interní chyby; korelujte s retry politikou klienta.
Infrastruktura jako kód a prostředí
- IaC: deklarativní šablony (CDK/Terraform/Pulumi/SAM/Serverless Framework); verzování, code review, drift detection.
- Prostředí: izolace dev/stage/prod účtů, branch per env pro API bránu; preview prostředí pro pull requesty.
Resilience a spolehlivost
- Timeouty: kratší než závislosti; hedging u čtení; circuit breaker pro externí API.
- Retries: exponenciální backoff s jitterem; idempotence; dead-letter kanál pro manuální zásah.
- Policy: graceful degradation (například vrácení starší cache), fallbacks, brownout neklíčových funkcí při špičkách.
Bezserverové GraphQL API
- Resolvery: mapujte resolvery na funkce s dataloadery pro eliminaci N+1 problému; autorizace per-field z claims.
- Limits: hloubka dotazu, složitost, timeouty per resolver; persisted queries.
- Subscriptions: spravované WebSocket/HTTP/2 kanály; posílejte pouze eventy s minimem payloadu.
Audit a compliance
- PII: klasifikace dat, privacy by design, end-to-end šifrování (transport + uložená data), pseudonymizace.
- Evidence: neměnný audit změn konfigurace a přístupů; retenční politiky logů; přístup na základě rolí a potřeby.
Příklad referenční topologie
- API Gateway (veřejné) → funkce (autentizace, validace) → fronta (asynchronní příkaz) → orchestrátor (stavový workflow) → DB (NoSQL) a index (vyhledávání).
- Pro čtení: API Gateway → funkce → cache → DB; TTL a invalidace eventy.
- Integrace: outbox v DB → stream → webhook worker → cílové API s retry a podpisy žádostí.
Checklist před produkčním nasazením
- OpenAPI/GraphQL schéma publikováno, kontraktační testy zelené.
- Autentizace OIDC, validace aud/iss v bráně, least-privilege IAM role.
- Rate limiting, WAF, CORS nastavené minimalizovaně.
- Idempotence pro zápisy; definovaná retry/backoff politika.
- Provisioned concurrency pro kritické cesty; warm konektory k databázi.
- Strukturované logy, end-to-end trasování, metriky p99, alarmy a runbooky.
- Canary release s automatickým rollbackem; připravené feature flags.
- DR plán: multi-AZ, snapshoty, test obnovy; provedena chaos cvičení.
Časté chyby a jak se jim vyhnout
- Nadměrná granularita funkcí bez sdílené vrstvy knihoven vede k vysoké latenci a nákladům. Řešení: shared layers, aggregator pattern.
- Synchronní dlouhé běhy vedou k timeouts a drahým invokacím. Řešení: rozdělit na kroky a orchestrace.
- Chybějící idempotence vede k duplikátům objednávek. Řešení: klíče idempotence a conditional writes.
- Neřízené CORS znamená bezpečnostní rizika. Řešení: přesně definované originy a metody.
- Příliš volná IAM politika. Řešení: role s omezením na zdroj (resource-scoped) a permission boundaries.
Závěr
Dobře navržené bezserverové API stojí na jasných kontraktech, stateless funkcích, důsledné bezpečnosti a pozorovatelnosti, s asynchronními vzory pro odolnost a škálování. Využitím API brány, event-driven architektur, IaC a automatizovaných testů lze dosáhnout rychlých iterací s nízkými provozními náklady a vysokou spolehlivostí. Klíčové je myslet na idempotenci, limity, latenci a správu verzí od prvního dne.



























