Efektivní a bezpečné REST API
REST API je rozhraní pro výměnu dat a řízení procesů založené na principech práce se zdroji, nad nimiž se provádějí standardní operace. Cílem dobře navrženého API je být predikovatelné, konzistentní, výkonné a především bezpečné. Tento článek pokrývá návrhové vzory, bezpečnostní postupy, standardy a provozní aspekty, které vedou k efektivním a odolným REST službám.
Doménový model a identifikace zdrojů
- Zdroj vs. reprezentace: zdroj představuje doménový objekt; reprezentace je jeho serializace (např. JSON). Stabilní URI by měly jednoznačně identifikovat zdroje, nikoliv akce.
- Granularita: navrhujte zdroje tak, aby odpovídaly přirozeným entitám a vztahům (např.
/uzivatele,/objednavky,/uzivatele/{id}/objednavky). - Názvosloví v množném čísle: zvyšuje konzistenci a čitelnost (např.
/produktymísto/produkt). - Adresovatelné podzdroje: používejte hierarchii pro vztahy 1:N a N:M; pro volné asociace upřednostněte dotazy a filtry.
URI konvence, metody a sémantika
- HTTP metody:
GET(čtení),POST(vytváření, ne-idempotentní),PUT(náhrada, idempotentní),PATCH(částečná aktualizace),DELETE(odstranění),HEAD(metadata),OPTIONS(možnosti). - Bez sloves v cestě: preferujte
POST /objednavkypřed/vytvorObjednavku; akce modelujte jako zdroje nebo kontrolované operace (např./platby/{id}/refundace). - Bezpečnost a idempotence: používejte metody v souladu s jejich sémantikou;
PUTaDELETEby měly být idempotentní,GETnesmí mít vedlejší efekty.
Verzování a kompatibilita
- Stabilita API jako závazek: minimalizujte breaking změny; preferujte přidávání nových polí před přejmenováváním či změnami významu.
- Strategie verzování: použijte
URI v1/v2nebo mediální typy v hlavičkách (Accept: application/vnd.example.v2+json). Vyberte jednu strategii a pečlivě ji dokumentujte. - Deprekační cyklus: oznamte datum ukončení podpory, poskytujte varovné hlavičky (
Deprecation,Sunset) a migrační průvodce.
Filtrace, stránkování a řazení
- Predikovatelné parametry:
?page,?limit,?sort=field,-field2,?filter[field]=value. - Cursor-based stránkování: škálovatelnější než offsetové; vracejte
next/prevkurzory vlinks. - Projekce a rozšíření:
?fields=a,b,cpro výběr polí,?include=relacepro načtení souvisejících zdrojů.
Formát odpovědí a kontrakt
- Konzistentní obálka: sjednoťte strukturu odpovědí (data, metadata, informace o stránkování, odkazy). Vracejte správný
Content-Typea případněETag. - Standardizované chyby: používejte pole
status,code,message,fields/detailsa korelačnítraceId. Vhodná je implementace dle RFC 7807 (application/problem+json). - Mezinárodní prostředí: zvažte lokalizovatelné chybové zprávy a stabilní programátorské kódy chyb.
HTTP kódy a hlavičky
- 2xx:
200 OK,201 CreatedsLocation,204 No ContentpoDELETEčiPUTbez těla odpovědi. - 3xx:
304 Not Modifiedpři validaci cache,303 See Otherpo akci vedoucí k asynchronnímu zdroji. - 4xx:
400chyby validace,401neautorizovaný přístup,403zakázaný přístup,404nenalezený zdroj,409konflikty,422nevalidní data,429překročení limitu požadavků. - 5xx: serverové chyby; u asynchronních operací preferujte
202 Accepteda stavové zdroje. - Cache hlavičky:
ETag,Last-Modified,Cache-Control,Vary; pro bezpečnost rovněžStrict-Transport-Security,X-Content-Type-Options,Content-Security-Policypro webové klienty.
Bezpečnostní základy: autentizace a autorizace
- TLS všude: vynucení HTTPS, ochrana proti downgrade útokům a správná konfigurace šifrovacích algoritmů.
- OAuth 2.1 a OIDC: pro delegovanou autentizaci; preferujte Authorization Code s PKCE. Pro server-to-server komunikaci využijte client credentials.
- Tokeny: krátká životnost, rotace refresh tokenů, správné nastavení audience a scope. Zvažte formát
JWTs digitálním podepsáním a možností revokace přes introspekci. - Autorizace: RBAC/ABAC, jemnozrnná práva na úrovni zdrojů; přenášejte minimálně nutné scope.
Ochrana proti běžným útokům
- Rate limiting a throttling: ochrana před DoS útoky a zneužitím; limity komunikujte pomocí hlaviček
X-RateLimit-*a vracejte429. - Validace vstupů a normalizace: ověřujte délky, typy a formáty; odmítejte neznámá pole; používejte přístup na základě whitelistu.
- Kódování výstupu: zabráněte injekcím na straně klienta; správně nastavujte typ obsahu a kódování.
- Idempotence a ochrana proti opětovnému přehrání: použití idempotency klíčů pro platby a objednávky (
Idempotency-Key), nonce a časové razítka. - Bezpečné logování: logujte pouze minimálně nutná data, maskujte osobní identifikovatelné informace a citlivá data, nikdy neukládejte celé tokeny.
Integrita dat a souběh
- Optimistická konkurence: použití
ETags hlavičkamiIf-Match/If-None-Matchpro bezpečné aktualizace a prevenci ztráty dat. - Transakční hranice: zajištění konzistentního chování při částečných selháních; u vícekrokových operací navrhněte kompenzační logiku (pattern saga).
- Idempotentní návrh: opakované požadavky nesmí způsobit duplicitní efekty.
Výkon a škálování
- HTTP cache: využijte cachovatelné
GETsETag; respektujteCache-ControlaVary. - Agregace a selektivní načítání: projekce polí, zahrnutí vztahů, ale s opatrností před nadměrným načítáním („overfetching“).
- Komprese a velikost payloadu: povolte
gzipabr, omezte maximální velikost požadavků a odpovědí. - Asynchronní zpracování: u operací s dlouhou dobou běhu použijte
202 Accepteda stavové zdroje nebo webhooky. - Horizontální škálování: bezstavové servery, load balancing bez sticky session, sdílení stavu přes úložiště nebo fronty zpráv.
Observabilita, měření a spolehlivost
- Strukturované logování: korelační
traceId/spanId, standardizované klíče, JSON formát logů. - Tracing a metriky: APM, distribuované trasování, metriky latence, chybovosti a saturace; využití metodik RED a USE.
- SLA/SLO: definujte cílové hodnoty latence a dostupnosti; měřte chybovost na konkrétních endpointy a tenanty.
- Circuit breaker a retry: exponenciální zpomalování (backoff), jitter, limity počtu pokusů; zajištění idempotence požadavků.
Dokumentace a kontrakty
- OpenAPI specifikace: jediný zdroj pravdy pro schémata, validaci, generování klientů a testů.
- Konzistentní příklady: uvádějte vzory požadavků a odpovědí, chybových stavů i hraničních případů.
- Changelog: udržujte historii změn, poznámky o deprekacích a migrační instrukce.
Testování a kvalita
- Validace schémat: kontraktové testy vůči OpenAPI, statická i runtime validace payloadu.
- Jednotkové a integrační testy: pokrývají logiku, autorizaci, chybové scénáře, limity a výkon.
- Bezpečnostní testy: testování negativních scénářů, fuzzing, skenování dle OWASP API Top 10, kontrola konfigurace CORS a bezpečnostních hlaviček.
- Správa testovacích dat: deterministická data, anonymizace PII a izolace multi-tenant prostředí.
Správa verzí klientů a SDK
- Generované SDK: udržujte balíčky pro hlavní programovací jazyky; verze SDK slaďte s verzemi API, dodávejte migrační příručky.
- Kompatibilita klientů: tolerujte nová, neznámá pole; nevyvozujte závěry o úplnosti dat.
Řízení chyb a odolnost vůči selháním
- Predikovatelné chybové formáty: klienti musí být schopni automaticky reagovat; vracejte stabilní chybové kódy a detailní
errors[].field. - Omezení informací: u 4xx a 5xx nesdělujte interní implementační detaily; ty logujte pouze na serveru.
- Graceful degradation: funkční přepínače (feature flags), fallbacky a read-only režimy při částečných výpadcích.
Správa dat, ochrana soukromí a compliance
- PII a citlivá data: minimalizujte sběr, šifrujte data při přenosu i v klidu, řiďte přístup a auditujte použití.
- Doba uchovávání a práva subjektů: endpointy a procesy pro mazání či anonymizaci dat dle legislativních požadavků (např. „právo být zapomenut“).
- Multitenancy: striktní oddělení dat tenantů na úrovni autorizace i dotazů; testujte scénáře „tenant escape“.
CORS a bezpečná integrace s webovými klienty
- Princip minimální nutnosti: povolujte pouze nezbytné originy, metody a hlavičky; nikdy nepovolujte wildcard
*proAuthorization. - Credentials: používejte pouze pokud je to nezbytné; zvažte preferenci tokenů v
Authorizationpřed cookies.
Provozní model a CI/CD
- Automatizované nasazení: validace schémat, bezpečnostní skeny a smoke testy v deploy pipeline.
- Konfigurovatelnost: konfigurujte přes proměnné prostředí a spravujte tajemství v bezpečném úložišti; nikdy neukládejte citlivá data v repozitáři.
- Canary release a postupný rollout: omezte dopad regresí, sbírejte telemetrii před plným nasazením.
Metodické vzory a anti-patterny
- Doporučené vzory: HATEOAS pro navigaci, resource expansion s limity, idempotency klíče, explicitní stavové stroje pro dlouhotrvající procesy.
- Anti-patterny: přetížené
POSTendpointy pro libovolné akce, nekonzistentní názvosloví, skryté breaking změny, přenos nadbytečných dat, únik interních stack trace errorů.
Ukazatele úspěchu (KPI) pro REST API
| Oblast | Metoda | Význam | Cílový trend |
|---|---|---|---|
| Výkon | P95/P99 latence, průchodnost (throughput) | Uživatelská zkušenost,
Ján Gašparík |



























