Jak postavit REST API s Node.js a Express: praktický průvodce

From Rikkiepedia
Revision as of 18:00, 21 August 2026 by Cedric7644 (talk | contribs) (Created page with "Další praktickou záležitostí je správa stavových kódů HTTP. Vracejte 200 pro úspěšné GET požadavky, 201 pro vytvoření nového zdroje, 204 pro úspěšné smazání a 400 nebo 404 pro chybové situace. Nepoužívejte univerzální 500 pro vše, co se nepovede. Konkrétní kódy pomáhají klientům rychleji diagnostikovat problém. Rovněž se vyhněte vracení surových chybových hlášení z databáze – vytvořte si jednoduchý middleware, který zach...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Další praktickou záležitostí je správa stavových kódů HTTP. Vracejte 200 pro úspěšné GET požadavky, 201 pro vytvoření nového zdroje, 204 pro úspěšné smazání a 400 nebo 404 pro chybové situace. Nepoužívejte univerzální 500 pro vše, co se nepovede. Konkrétní kódy pomáhají klientům rychleji diagnostikovat problém. Rovněž se vyhněte vracení surových chybových hlášení z databáze – vytvořte si jednoduchý middleware, který zachytí výjimky a převede je na JSON s přátelským popisem.

Routování a zpracování požadavků Express používá pro definici koncových bodů metody jako app.get(), app.post(), app.put() a app.delete(). Každá z nich přijímá cestu a callback funkci, která má přístup k objektům req a res. Při psaní rout je důležité používat parametry cest, třeba /users/:id, a validovat je ještě před samotným zpracováním. Typickou chybou je zapomenout na asynchronní zpracování – pokud vaše handler funkce nepoužívá async/await, může dojít k neošetřeným rejectovaným promisům, které aplikaci spadnou. Vždy proto obalujte asynchronní operace do try/catch bloků.

Pro asynchronní akce budete potřebovat simulovat store. Nejjednodušší je použít redux-mock-store, který vám umožní zachytit dispatchované akce. Vytvoříte mock store s inicializovaným stavem, zavoláte akci a poté zkontrolujete, jaké akce byly odeslány. Tento přístup funguje skvěle pro thunky, ale pozor na to, že mock store neprovádí reducery. Pokud potřebujete otestovat i změny stavu, musíte použít jiný přístup – buď vytvořit skutečný store s reducery, nebo použít kombinaci mock store a ručního volání reducerů.

Verzování kódu při paralelním vývoji více feature větví je častým zdrojem konfliktů a ztráty času. Klíčem k efektivní práci je disciplína a jasná pravidla, která platí pro celý tým. Než začnete s jakoukoli větví, ujistěte se, že máte aktuální stav hlavní větve a že vaše lokální změny jsou založeny na stabilním bodu. Ideálně si před vytvořením nové větve stáhněte nejnovější změny z remote a vytvořte větev až z aktuálního stavu. Tím se vyhnete zbytečným konfliktům, které vznikají při mergování starých větví.

Jak na časté mergování bez zbytečných konfliktů Časté mergování z hlavní větve do vaší feature větve je sice správné, ale musíte dbát na to, aby vaše commit history zůstala čitelná. Místo klasického merge, který vytváří zbytečné merge commity, použijte rebase a squash. Rebase přehraje vaše commity na aktuální vrchol hlavní větve, čímž získáte lineární historii a snadněji řešíte případné konflikty. Squash vám zase umožní sloučit více drobných commitů do jednoho logického celku. Díky tomu bude historie vaší větve srozumitelná a review kódu mnohem rychlejší.

Začněte u reducerů. Reducer je funkce, která přijímá stav a akci a vrací nový stav. Testování spočívá v tom, že zavoláte reducer s konkrétním stavem a akcí a porovnáte výsledek s očekávaným. Důležité je neměnit původní stav – reducer musí být čistý. Při psaní testů vždy vytvořte nový objekt stavu, abyste předešli vedlejším efektům. Typická chyba je testovat reducer přes celý store, což zbytečně komplikuje izolaci. Místo toho importujte reducer přímo a testujte ho jako samostatnou jednotku.

Prakticky si osvojte práci s mezerami. Větší prostor mezi prvky snižuje chybovost a usnadňuje orientaci. Stejně důležité je správné zarovnání – texty a prvky by měly mít jednotný rytmus. Používejte mřížku (grid), i když ji nakonec nezobrazíte. Když máte hotový prototyp, otestujte si ho sami, ale hlavně pozorujte reálné uživatele. Není třeba velké testovací studio – stačí, když požádáte kolegu, aby splnil jednoduchý úkol, a sledujte, kde váhá nebo kliká špatně. Z toho získáte cenné informace pro další iterace.

Poslední částí je testování složitějších async toků, jako jsou sekvenční volání nebo paralelní requesty. Zde se vyplatí použít skutečný store s reducery, abyste mohli ověřit kompletní změnu stavu. Vytvořte si testovací helper, který vytvoří store s potřebnými reducery a middleware, a poté v testu dispatchujte async akci a čekejte na dokončení. Pomocí async/await a malého zpoždění (např. setImmediate) se vyhnete závodům. Hlavní chyba, které se vyvarujte, je používání setTimeout bez kontroly – v testech to vede k nestabilitě a pomalému běhu.

Jak na testování async akcí s thunk middleware Při testování thunků se často setkáte s potřebou mockovat API volání. Místo skutečného HTTP requestu použijte knihovnu pro mockování, jako je nock nebo msw. Tyto nástroje vám umožní definovat očekávané odpovědi a ověřit, že vaše akce správně zpracovává úspěch i chybu. Typický test vypadá takto: vytvoříte mock store, nastavíte očekávané API volání, zavoláte async akci a počkáte na její dokončení. Poté ověříte, že store dispatchoval správné akce (např. REQUEST, SUCCESS nebo FAILURE).