Když REST API v Node.js potřebuje pořádnou strukturu, Express ji dodá
More actions
JWT je ale jen podepsaný řetězec. Jeho bezpečnost stojí na tom, jak ho vytvoříte a jak s ním zacházíte. Nejdůležitější je podpis. Vždy používejte asymetrický algoritmus, jako je RS256, a soukromý klíč držte výhradně na serveru. Veřejný klíč pak můžete distribuovat klientům, kteří jen ověřují podpis. Vyhněte se symetrickému HS256, pokud nemáte jen jednu službu, protože ten vyžaduje sdílení tajemství, které se snadno dostane tam, kam nemá. A nikdy, ale opravdu nikdy nepodepisujte token algoritmem, který si klient může zvolit sám – to je cesta k obejití celé ochrany.
Stavíte REST API v Node.js a Expressu? Základní server s pár route handlers zvládne každý, ale jakmile projekt roste, rekonstrukce koupelny krok za krokemčnou se objevovat problémy s údržbou, testováním a škálovatelností. Tento článek se zaměří na konkrétní postupy, jak API navrhnout, aby bylo čitelné, robustní a připravené na produkční provoz. Ukážeme si, jak organizovat kód, jak pracovat s chybami a na co si dát pozor při zpracování požadavků.
Druhý typický problém je příliš mnoho testů na stejné úrovni, ale s duplicitním pokrytím. Pokud máte integrační test, který ověřuje zápis barvy stěn do obýváku databáze, a zároveň end-to-end test, který dělá to samé přes API, jen plýtváte časem. Každá úroveň má jiný účel. Jednotkové testy chytají chyby v logice, integrační testy kontrolují, že spolu komponenty komunikují správně, a end-to-end testy ověřují, že uživatel projde aplikací bez zaváhání. Než napíšete nový test, zeptejte se: „Jakou chybu chci chytit?" Pokud odpověď je „nevím", test je zbytečný.
Při budování pyramidy myslete také na rychlost. Pokud jednotkové testy trvají déle než sekundu, něco je špatně. Možná používáte příliš mnoho mocků, nebo naopak testujete příliš velké celky. Dbejte na to, aby každý test byl nezávislý – neměl by záviset na stavu z předchozího testu. To platí dvojnásob u integračních testů, kde se často používá sdílená databáze. Ideální je, když každý test běží proti čistému stavu, ať už pomocí transakcí, nebo vytvářením vlastních dat.
Když zabezpečujete API, máte v zásadě dvě cesty: klasické session uložené na serveru, nebo stateless tokeny typu JWT. Hlavní rozdíl je v tom, kdo si pamatuje, že je uživatel přihlášený. U session držíte stav na serveru, u JWT ho nesete v každém požadavku. Volba mezi nimi není o modernosti, ale o tom, co vaše aplikace skutečně potřebuje. Pokud stavíte mikroservisy nebo potřebujete sdílet přihlášení mezi více nezávislými službami, JWT vám ušetří spoustu starostí.
Jak často a jakým způsobem aktualizovat větev Pravidelně si do své feature větve tahněte změny z hlavní větve, ideálně každý den. Používejte rebase místo merge, pokud jste si jisti, že vaše větev nikdo další nesdílí. Rebase udělá historii lineárnější a usnadní pozdější code review. Pokud ale na větvi pracuje více lidí, merge je bezpečnější volbou. Nezapomeňte, že rebase přepisuje historii, takže u sdílených větví způsobí konflikty ostatním.
Na závěr si nastavte pravidlo, že každou větev po mergu smažete. Udržování starých větví jen přidává zmatek a zvyšuje riziko, že někdo omylem naváže na zastaralý kód. Pokud potřebujete historii, git ji uchovává i po smazání větve. Klíčem k úspěchu je disciplína a . Když budete tyto zásady dodržovat, práce na více feature větvích bude přehledná a vy se vyhnete zbytečným konfliktům.
Kde nejčastěji pyramida padá a jak to napravit Nejčastější chybou je obrácená pyramida – když máte stovky end-to-end testů a jen pár jednotkových. Tým pak tráví více času opravováním testů než vývojem funkcí. Příčinou bývá snaha testovat všechno přes uživatelské rozhraní, protože „to je nejvěrnější obraz toho, co uživatel vidí". Jenže takový přístup ignoruje, že každý end-to-end test je pomalý a náchylný k selhání kvůli načasování, animacím nebo změnám v rozvržení. Řešení není testy mazat, ale přesunout většinu scénářů na nižší úrovně. Logiku, která se skrývá rekonstrukce koupelny krok za krokem formulářem, otestujte na úrovni jednotek nebo integrace. End-to-end testy si nechte jen na kritické cesty – přihlášení, platbu nebo registraci.
Když pracujete na více feature větvích najednou, verzování se rychle změní v chaos, pokud nemáte jasná pravidla. Nejčastější chybou je spoléhat se na to, že si každý zapamatuje, co kde dělá. Místo toho si nastavte systém, který funguje i ve chvíli, kdy na projektu dělá více lidí a větve se začnou křížit.
Při práci s databází (např. MongoDB nebo PostgreSQL) se vyhněte vracení celých databázových objektů. Vždy vyberte jen potřebná pole – typicky pomocí select nebo projection. Tím zmenšíte přenos dat a zároveň neuniknou citlivé údaje, jako jsou hesla nebo tokeny. Pro filtrování a stránkování použijte query parametry (?limit=10&offset=20), ale vždy je omezíte na maximální hodnoty, aby klient nemohl načíst celou tabulku.