<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://crabcodex.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ATUCandida</id>
	<title>CrabCodex - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://crabcodex.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ATUCandida"/>
	<link rel="alternate" type="text/html" href="https://crabcodex.com/index.php/Special:Contributions/ATUCandida"/>
	<updated>2026-08-31T11:54:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://crabcodex.com/index.php?title=Co_se_stane,_kdy%C5%BE_poprv%C3%A9_zavol%C3%A1te_API_a_jak_se_vyhnout_nej%C4%8Dast%C4%9Bj%C5%A1%C3%ADm_chyb%C3%A1m&amp;diff=77452</id>
		<title>Co se stane, když poprvé zavoláte API a jak se vyhnout nejčastějším chybám</title>
		<link rel="alternate" type="text/html" href="https://crabcodex.com/index.php?title=Co_se_stane,_kdy%C5%BE_poprv%C3%A9_zavol%C3%A1te_API_a_jak_se_vyhnout_nej%C4%8Dast%C4%9Bj%C5%A1%C3%ADm_chyb%C3%A1m&amp;diff=77452"/>
		<updated>2026-08-29T03:00:43Z</updated>

		<summary type="html">&lt;p&gt;ATUCandida: Created page with &amp;quot;Pokud testujete kód, který pracuje se soubory nebo sítí, použijte dočasné adresáře (tmp_path) nebo monkeypatch pro nahrazení externích závislostí. Pytest nabízí vestavěné fixture, které vám ušetří práci – stačí je přidat do argumentů funkce. Vyhnete se tak testům, které jsou pomalé nebo závislé na prostředí. Další běžnou chybou je testovat interní implementaci místo chování – zaměřte se na vstupy a výstupy, ne na to, jak j...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pokud testujete kód, který pracuje se soubory nebo sítí, použijte dočasné adresáře (tmp_path) nebo monkeypatch pro nahrazení externích závislostí. Pytest nabízí vestavěné fixture, které vám ušetří práci – stačí je přidat do argumentů funkce. Vyhnete se tak testům, které jsou pomalé nebo závislé na prostředí. Další běžnou chybou je testovat interní implementaci místo chování – zaměřte se na vstupy a výstupy, ne na to, jak jsou vnitřně zpracovány&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;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. [https://Venturebeat.com/?s=Realita Realita] je ale jiná: chyba vzniká v okamžiku, kdy se do dotazu dostane  bez ošetření.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Na závěr si zkuste napsat malý skript, který zpracuje odpověď z API a uloží ji do [https://Bom.so/1rfRZ5 souboru]. To vás naučí pracovat s daty, která nejsou čistě tabulková. Často narazíte na vnořené struktury — pole objektů, objekty v objektech. Naučte se je procházet a získávat konkrétní hodnoty. Pokud narazíte na chybu, kterou nechápete, zkuste si odpověď vypsat celou, včetně hlaviček. Často tam najdete podrobnosti, které vám pomůžou problém vyřešit. Až to zvládnete, budete mít solidní základ pro práci s jakýmkoli API, které vám přijde do cesty.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Základním krokem je vybrat správný typ pokrytí. Nejčastěji se setkáte s pokrytím řádků, které je snadné spočítat a snadno se prezentuje. Větší výpovědní hodnotu má pokrytí větví, protože odhaluje, jestli byly testovány obě možnosti u podmínek, a pokrytí podmínek, které kontroluje jednotlivé logické výrazy. Pro nový kód si nastavte cíl alespoň pro pokrytí větví; jen řádky vás nechají ve slepé uličce, protože můžete mít 80 % řádků a přitom polovinu rozhodovacích cest netestovanou. Důležité je měřit pokrytí na úrovni jednotek, nikoli jen na úrovni celého systému, a výsledky ukládat do historie, abyste viděli trend.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Proč je běžné testování na demo stránkách k ničemu Mnoho firem testuje aplikace na jednoduchých demo scénářích, kde se otestuje jen pár formulářů. Útočník se ale může zaměřit na méně nápadná místa, jako jsou vyhledávací filtry, třídění v tabulkách, nebo třeba textové pole pro poznámky. Často se zapomíná na sekundární funkce, jako je export dat, hromadné operace nebo synchronizace s externími službami. Proto je nutné provádět penetrační testy na plné verzi aplikace s reálnými daty. Automatické skenery najdou jen podstatnou část zranitelností, ale pokročilé techniky vyžadují ruční analýzu. Dobré je také sledovat logy databáze a hledat pokusy o neočekávané příkazy – neobvyklé chyby syntaxe nebo velký objem dotazů z jedné IP.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Měření pokrytí testy patří mezi nejčastěji používané metriky kvality kódu. Na první pohled vypadá jednoduše: stačí spustit nástroj, který projde zdrojový kód a spočítá, kolik řádků, větví nebo funkcí bylo při testech vykonáno. Výsledek v procentech pak působí jako objektivní ukazatel. Jenže samotné číslo vám neřekne, jestli testy skutečně chrání před chybami, nebo jen mechanicky procházejí kódem. Než začnete hodnoty interpretovat, měli byste vědět, co přesně měříte a kde jsou limity této metriky.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;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.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nejdřív si osvojte práci s nástrojem, který vám ukáže, co API vrací. Můžete použít terminál, ale pro začátek je pohodlnější nějaký grafický klient, kde vidíte hlavičky, tělo odpovědi i status kód. Vyzkoušejte si na testovacím prostředí, jak vypadá úspěšná odpověď a jak chybová hláška. Všímejte si stavových kódů — 200 znamená, že vše proběhlo v pořádku, 404 říká, že jste hledali něco, co neexistuje, a 429 upozorňuje, že jste překročili limit volání. Tyto kódy jsou váš navigační maják.&lt;/div&gt;</summary>
		<author><name>ATUCandida</name></author>
	</entry>
	<entry>
		<id>https://crabcodex.com/index.php?title=Kdy%C5%BE_REST_API_v_Node.js_pot%C5%99ebuje_po%C5%99%C3%A1dnou_strukturu,_Express_ji_dod%C3%A1&amp;diff=77393</id>
		<title>Když REST API v Node.js potřebuje pořádnou strukturu, Express ji dodá</title>
		<link rel="alternate" type="text/html" href="https://crabcodex.com/index.php?title=Kdy%C5%BE_REST_API_v_Node.js_pot%C5%99ebuje_po%C5%99%C3%A1dnou_strukturu,_Express_ji_dod%C3%A1&amp;diff=77393"/>
		<updated>2026-08-29T02:52:42Z</updated>

		<summary type="html">&lt;p&gt;ATUCandida: Created page with &amp;quot;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 t...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;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, [https://adamwisniewski34.bravejournal.net/jak-efektivne-verzovat-kod-pri-praci-na-vice-feature-vetvich 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ů.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;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 [http://wudao28.com/home.php?mod=space&amp;amp;uid=2888361 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?&amp;quot; Pokud odpověď je „nevím&amp;quot;, test je zbytečný.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;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.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;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í.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;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.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;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.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;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 [https://www.renewableenergyworld.com/?s=u%C5%BEivatel uživatel] vidí&amp;quot;. 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á [http://bbs.yx3.com/home.php?mod=space&amp;amp;uid=286418 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.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;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.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;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&amp;amp;offset=20), ale vždy je omezíte na maximální hodnoty, aby klient nemohl načíst celou tabulku.&lt;/div&gt;</summary>
		<author><name>ATUCandida</name></author>
	</entry>
	<entry>
		<id>https://crabcodex.com/index.php?title=Kdy%C5%BE_se_v%C3%A1m_k%C3%B3d_zamot%C3%A1,_s%C3%A1hn%C4%9Bte_po_t%C4%9Bchto_z%C3%A1sad%C3%A1ch&amp;diff=77319</id>
		<title>Když se vám kód zamotá, sáhněte po těchto zásadách</title>
		<link rel="alternate" type="text/html" href="https://crabcodex.com/index.php?title=Kdy%C5%BE_se_v%C3%A1m_k%C3%B3d_zamot%C3%A1,_s%C3%A1hn%C4%9Bte_po_t%C4%9Bchto_z%C3%A1sad%C3%A1ch&amp;diff=77319"/>
		<updated>2026-08-29T02:37:35Z</updated>

		<summary type="html">&lt;p&gt;ATUCandida: Created page with &amp;quot;Při automatizaci testů se zaměřte na stabilní a pomalé UI prvky, jako jsou přihlašovací formuláře, nákupní košík nebo onboarding. Automatizace mobilních testů je náročnější než u webu kvůli dynamickým prvkům a animacím. Používejte nástroje, které umožňují čekání na prvek na základě podmínky, ne jen pevný časový limit. Častou chybou je spoléhat na „sleepy&amp;quot;, které testy zpomalují a činí je křehkými. Místo toho definujte...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Při automatizaci testů se zaměřte na stabilní a pomalé UI prvky, jako jsou přihlašovací formuláře, nákupní košík nebo onboarding. Automatizace mobilních testů je náročnější než u webu kvůli dynamickým prvkům a animacím. Používejte nástroje, které umožňují čekání na prvek na základě podmínky, ne jen pevný časový limit. Častou chybou je spoléhat na „sleepy&amp;quot;, které testy zpomalují a činí je křehkými. Místo toho definujte explicitní očekávání, kdy má být prvek viditelný nebo klikatelný.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Kdy se vyplatí sáhnout po cloudových zařízeních a kdy po fyzických? Pro začátek si vystačíte s lokálními emulátory a simulátory, ale ty neodhalí problémy s výkonem na slabším hardwaru nebo s teplotou procesoru při delším zatížení. Pokud vyvíjíte aplikaci pro širokou veřejnost, je rozumné investovat do přístupu k reálným zařízením přes cloudové služby. Umožní vám to testovat na stovkách modelů bez nutnosti fyzického vlastnictví. Pozor ale na to, že cloudové služby ne vždy simulují přesně chování senzorů (např. GPS, akcelerometr) nebo síťovou konektivitu. Proto kombinujte: klíčové scénáře ověřte na fyzických zařízeních, která máte k dispozici, a širokou škálu pokryjte cloudem.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Dalším častým problémem jsou vedlejší efekty. Funkce, která mění vnější stav, je past. Když voláte processOrder(user) a funkce tiše upraví globální pole, po čase už nikdo nebude vědět, kdo za to může. Místo toho vracejte nové hodnoty a nechte volajícího, aby se rozhodl, co s nimi udělá. Například const updatedUser = addItemToCart(user, item) je mnohem bezpečnější než funkce, která mění user přímo. Pokud potřebujete mutovat, dělejte to na jednom místě a pojmenujte to jasně.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Podle rychlosti a spolehlivosti rozdělte testy do vrstev Zaveďte pravidlo dvou rychlostí. Jednotkové testy běží při každém uložení kódu, integrační testy pouze před nasazením. Toto oddělení umožní vývojářům pracovat rychle, aniž by museli čekat na spuštění celé sady. Pro integrační testy vytvořte samostatný adresář nebo projekt a připojte je do pipeline až po úspěšném průchodu rychlých testů. Dbejte na to, aby integrační testy měly izolované prostředí – vlastní databázi a kontejnery, které se po běhu zlikvidují.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Začněte tím, že si oddělíte čistou logiku od vedlejších efektů. Reducer by neměl obsahovat žádné volání API, časování ani generování náhodných čísel. Pokud takovou logiku najdete v reduceru, přesuňte ji do action creatoru nebo do samostatné funkce. Tento krok je zásadní pro snadné testování, protože čisté funkce jsou předvídatelné. Typická chyba začátečníků je testovat reducer přes celý stor s middlewarem, což zbytečně zpomaluje běh testů a znesnadňuje izolaci chyb. Místo toho vytvořte reducer přímo a testujte ho jako jakoukoli jinou funkci.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Práce s poli a objekty skrývá další úskalí. Místo řetězení if a else použijte včasné ukončení — tzv. early return. Když funkce začne kontrolou neplatných vstupů a vrátí null nebo prázdnou hodnotu, hlavní logika zůstane na první úrovni odsazení. Vyhnete se tak pyramidám závorek, které se nedají číst. Také místo for cyklů zkuste map, filter a reduce. Tyto metody vyjadřují záměr — transformace, filtrování, agregace — a kód je pak kratší a přehlednější.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Při psaní testovacích scénářů se zaměřte na reálné uživatelské toky, ne jen na izolované funkce. Typickou chybou je testovat každé tlačítko zvlášť, ale neověřit, co se stane, když uživatel přeruší přihlášení, přijde hovor během platby nebo se mu vybije baterie v půlce nahrávání videa. Mobilní aplikace běží v prostředí plném přerušení, a proto je nezbytné testovat i tyto okrajové situace. Pomůže vám to odhalit problémy s ukládáním stavu, obnovením obrazovky nebo ztrátou dat, které by uživatele odradily.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Testování reducerů a async akcí nemusí znamenat stavět celé integrační prostředí. Redux sám o sobě je čistá knihovna, která nezávisí na DOMu ani na serveru. Pokud se omezíte na jednotkové testy, získáte rychlost i stabilitu. Stačí k tomu test runner, jako je Vitest nebo Jest, a pár pomocných funkcí. Reducer je obyčejná funkce, takže ho zavoláte s aktuálním stavem a akcí a porovnáte výsledek. Async akce, které používají thunk middleware, testujete podobně – mockujete závislosti a kontrolujete dispatchnuté akce.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;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í.&lt;/div&gt;</summary>
		<author><name>ATUCandida</name></author>
	</entry>
	<entry>
		<id>https://crabcodex.com/index.php?title=User:ATUCandida&amp;diff=77318</id>
		<title>User:ATUCandida</title>
		<link rel="alternate" type="text/html" href="https://crabcodex.com/index.php?title=User:ATUCandida&amp;diff=77318"/>
		<updated>2026-08-29T02:37:28Z</updated>

		<summary type="html">&lt;p&gt;ATUCandida: Created page with &amp;quot;Váš průvodce praktickým bydlením se zabývá denně. Sdílím zde, jak skloubit funkčnost s teplem domova. Nejraději ukazovat chytrá řešení, která zvládne každý.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Váš průvodce praktickým bydlením se zabývá denně. Sdílím zde, jak skloubit funkčnost s teplem domova. Nejraději ukazovat chytrá řešení, která zvládne každý.&lt;/div&gt;</summary>
		<author><name>ATUCandida</name></author>
	</entry>
</feed>