5 praktických rad, kdy zvolit REST a kdy GraphQL
Nakonec si dejte pozor na to, abyste DevOps nechápali jako roli nebo tým. Pokud vytvoříte „DevOps oddělení", ostatní týmy přestanou odpovídat za provoz a vrátí se do starých kolejí. Místo toho učte všechny členy týmu základní principy a dejte jim prostor je aplikovat. Můžete začít s jedním pilotním projektem a po pár měsících zhodnotit, co se zlepšilo. Vyhnete se tak zklamání a získáte měřitelné výsledky, které přesvědčí i skeptiky.
Jak začít: od inicializace k prvnímu commit Vytvořte si v kořenovém adresáři projektu soubor určený pro ignorování vybraných souborů. Zapište do něj složky jako závislosti, dočasné soubory, lokální konfigurace a případně médiové soubory. Nikdy neignorujte soubory, které jsou nutné pro běh aplikace, ale obsahují citlivé údaje – pro ty raději použijte proměnné prostředí. Po inicializaci repozitáře proveďte první commit. Do zprávy napište stručně, co projekt dělá a v jakém stavu se nachází. Vyhnete se tak situaci, kdy po měsíci nevíte, jestli je v repozitáři funkční verze, nebo jen rozbitá kostra.
Pokud si osvojíte parametrizované dotazy, ošetření dynamických konstrukcí přes whitelist a vrstvenou obranu, SQL injection se stane jen technickou možností, ne noční můrou. Vyplatí se investovat čas do automatizovaných testů, které útočné vektory pokryjí. Vlastní testy můžete doplnit nástroji, které sledují databázovou aktivitu v reálném čase. A pamatujte, že nejslabším článkem je vždy neupravený vstup – ať už přichází odkudkoli. Důslednost a prevence jsou jediný způsob, jak udržet data uživatelů v bezpečí.
Při návrhu API často stojíte před volbou mezi REST a GraphQL. Oba přístupy mají svá specifika, ale rozhodování nemusí být složité, pokud víte, na co se zaměřit. Základní rozdíl je v tom, že REST pracuje s více endpointy a pevně definovanými strukturami odpovědí, zatímco GraphQL nabízí jediný endpoint a dotaz, který si klient sám poskládá. To ale neznamená, že je GraphQL vždy lepší – naopak, pro řadu projektů je REST stále jasnou volbou.
SQL injection patří mezi nejstarší, ale stále nejnebezpečnější zranitelnosti webových aplikací. Útočník dokáže vložit vlastní SQL příkaz do dotazu, který aplikace posílá databázi. Přitom nepotřebuje žádné speciální nástroje – stačí mu formulář, URL parametr nebo hlavička, kterou aplikace předává do SQL dotazu. Pokud se to podaří, může číst citlivá data, měnit je, nebo dokonce získat plnou kontrolu nad serverem. Mnoho týmů přitom považuje tuto hrozbu za vyřešenou, protože používají ORM nebo frameworky. Realita je ale jiná: chyba vzniká v okamžiku, kdy se do dotazu dostane uživatelský vstup bez ošetření.
Nezapomínejte ani na chování při chybách. Čistý kód neznamená jen to, že funguje za ideálních podmínek, ale také že selhává srozumitelně. Vyhněte se prázdným catch blokům, které chybu polknou a nechají aplikaci v nekonzistentním stavu. Místo toho chybu zalogujte s kontextem a buď ji zpracujte, nebo nechte program spadnout, ale vždy s jasnou zprávou. Pomůže to při hledání příčiny v produkci a zabrání to tichému poškození dat, které se projeví až za týden.
Poslední, ale zásadní bod: pravidelný bezpečnostní audit kódu. SQL injection se často objeví po refaktoringu, kdy se zdánlivě neškodná změna promění v kritickou chybu. Do vývojového procesu zařaďte code review zaměřené na databázové dotazy a používejte statickou analýzu, která hledá nebezpečné vzory. Starší kód, který vznikl před zavedením bezpečnostních standardů, zkontrolujte prioritně – právě tam se obvykle skrývají nejhorší chyby. Nezapomeňte na pravidelné aktualizace frameworků a knihoven, protože mnoho zranitelností se opravuje právě v nich. Bezpečnost není jednorázový úkol, ale průběžný proces.
Kritická situace nastává u dynamických dotazů, kde se mění sloupce, řazení nebo LIMIT. Tam parametrizace nepomůže, protože potřebujete vložit identifikátor, ne hodnotu. Typická chyba je zapsat výsledek z URL přímo do ORDER BY. Řešení je striktní whitelist: seznam povolených názvů sloupců a směrů řazení. Pokud hodnota neodpovídá žádné položce, použijte výchozí nastavení. Stejně postupujte u názvů tabulek nebo jiných identifikátorů. Dalším častým přešlapem je zapomenutí na jiné typy vstupů, než jsou formuláře. SQL injection může přijít přes JSON payload, XML, hlavičky nebo dokonce přes názvy souborů při uploadu. Proto nikdy nepředpokládejte, že data z rozhraní jsou bezpečná jen proto, že nepocházejí z klasického formuláře.
Proč se vyplatí psát malé funkce a žádné vedlejší efekty Malé funkce s jasným vstupem a výstupem jsou srdcem čistého kódu. Když funkce mění globální stav nebo předává skryté parametry přes closure, vzniká pavučina závislostí, kterou nelze rozplést bez testů. Snažte se o to, aby funkce byly čisté: stejný vstup dává vždy stejný výstup a nemění nic mimo sebe. To usnadňuje testování, ale hlavně to umožňuje bezpečně měnit jednu část aplikace, aniž by se rozbila jiná. Když potřebujete upravit logiku, jednoduše vyměníte jednu funkci za jinou, místo abyste lovili, kde se co změnilo.