5 praktických tipů pro čisté REST API v Node.js

Víte, co děláte s claims a podpisem? Claims neboli tvrzení uvnitř tokenu byste měli vždy omezit na minimum. Nepoužívejte JWT jako úložiště citlivých údajů – role, oprávnění, e-maily, natož hesla nebo osobní údaje. Token je totiž podepsaný, ale ne šifrovaný; kdokoli, kdo ho získá, si ho může dekódovat a přečíst. Pokud potřebujete předávat informace, které mají zůstat důvěrné, použijte šifrovaný token JWE nebo lépe: přenášejte pouze identifikátor uživatele a zbytek si načtěte z databáze. Také si dejte pozor na to, co děláte s veřejným klíčem – pokud používáte RS256, veřejný klíč by měl být opravdu veřejný, ale nikdy ne privátní. Záměna klíčů je bohužel častá a vede k tomu, že útočník může podepisovat tokeny.<br> <br> <br> <br> Nezapomínejte také na rychlost. Testovací pyramida není jen o počtu testů, ale o čase, který jejich spuštění zabere. Ideální je, když jednotkové testy běží do pěti minut, integrační do patnácti a E2E do hodiny. Pokud vám E2E běží déle, rozdělte je do skupin podle kritičnosti a spouštějte je v noci. Ale pozor – noční běh znamená, že chybu objevíte až ráno. Proto se vyplatí mít aspoň pár klíčových E2E testů v CI, které běží při každém commitu.<br> <br> <br> <br> Další zrádná věc je větvení. Nováčci často commitnou rovnou do hlavní větve, i když pracují na nové funkci. Pak zjistí, že v hlavní větvi je rozbitý kód, a nevědí, jak ho oddělit. Řešení je jednoduché: pro každou činnost si vytvořte novou větev příkazem git checkout -b nazev-vetve. Tím získáte izolované prostředí, kde můžete experimentovat. Když se něco nepovede, větev jednoduše smažete a hlavní větev zůstane čistá.<br> <br> <br> <br> Když přijde na zabezpečení API, JWT tokeny jsou dnes standardem. Přesto se v praxi setkávám s implementacemi, které dělají z jinak solidního nápadu bezpečnostní díru. Nejde o to, že by JWT byl špatný – jde o to, jak ho nasadíte. Často stačí jedna zdánlivě drobná chyba, aby útočník získal přístup k datům, která měla zůstat chráněná. Pojďme se podívat na konkrétní postupy, které vám pomohou se vyhnout těm nejčastějším nástrahám.<br> <br> <br> <br> Třetí pastí je špatné ověření podpisu na straně serveru. Mnoho knihoven umí ověřit podpis automaticky, ale pokud si píšete vlastní kód, snadno se stane, že podpis zkontrolujete jen tehdy, když token obsahuje hlavičku s očekávaným algoritmem. Útočník může změnit algoritmus na „none" (žádný podpis), pokud server tuto možnost povoluje. Vždy proto explicitně povolte jen bezpečné algoritmy, nastavte knihovnu tak, aby odmítala tokeny s algoritmem „none", a ověřujte podpis vždy, bez výjimky. Stejně tak ověřujete, že token nebyl zmanipulován v hlavičce – například že typ tokenu je opravdu „JWT".<br> <br> <br> <br> Poslední rada: pyramidu neberte jako dogma, ale jako výchozí bod. U projektu s bohatým uživatelským rozhraním a složitou logikou na klientovi bude poměr jiný než u REST API bez frontendu. Důležité je, abyste se rozhodovali vědomě a ne náhodně. Měřte si dobu běhu, počet selhání a čas strávený údržbou. Jakmile uvidíte, že opravy testů žerou víc času než psaní nových funkcí, je čas pyramidu přebudovat. A to je přesně ten moment, kdy se vyplatí mít na paměti, proč pyramida existuje – ne pro krásu, ale pro efektivitu.<br> <br> <br> <br> Další pastí je nekonečné zdokonalování odhadů. Místo složitých bodů a hodin používejte jednoduchou stupnici – třeba velikost trička nebo Fibonacciho čísla. Důležité je porovnávat relativní náročnost, ne absolutní čas. Když zjistíte, že tým dodává trojku déle než pětku, diskutujte o příčinách na retrospektivě. Retrospektivu dělejte vždy, i když sprint dopadl dobře. Jinak se tým ochudí o zlepšování.<br> <br> <br> <br> Základem každého API je jednotná struktura odpovědí. Místo abyste v každém handleru posílali jiný tvar JSON, vytvořte si pomocnou funkci, která vrátí objekt se statusem, daty a případnou chybovou zprávou. Například sendResponse(res, statusCode, data, error). Tím zajistíte, že frontend vždy ví, co má očekávat. Ušetříte si tím i spoustu problémů při psaní testů, protože odpovědi budou předvídatelné.<br> <br> <br> <br> Na závěr jedno doporučení: nezkoušejte si pamatovat všechny příkazy. Stačí jich znát pět – init, add, commit, status, log – a zbytek si vyhledáte, až budete potřebovat. Klíčové je pochopit, že Git je nástroj pro práci s časem a větvemi, ne kouzelná hůlka. Čím víc ho budete používat, tím méně chyb budete dělat. A když už chybu uděláte, vězte, že Git vám téměř vždy dá možnost se vrátit.<br> <br> <br> <br> Další past: testy, které nejsou nezávislé. Pokud jeden test čeká na data vytvořená jiným testem, máte zaděláno na pořádný problém. Jakmile změníte pořadí spuštění, všechno se sype. Řešení je jednoduché – každý test si připraví vlastní data a po sobě uklidí. To platí pro všechny vrstvy pyramidy, ale u E2E je to kritické. Pokud test selže, musíte vědět, že to není kvůli stavu z předchozího testu.