<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://jak.mazovia.edu.pl/index.php?action=history&amp;feed=atom&amp;title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje</id>
	<title>Kdy REST ničí výkon a GraphQL zbytečně komplikuje - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://jak.mazovia.edu.pl/index.php?action=history&amp;feed=atom&amp;title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje"/>
	<link rel="alternate" type="text/html" href="https://jak.mazovia.edu.pl/index.php?title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje&amp;action=history"/>
	<updated>2026-10-16T09:41:35Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://jak.mazovia.edu.pl/index.php?title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje&amp;diff=1041473&amp;oldid=prev</id>
		<title>BridgetteLeech o 19:37, 11 paź 2026</title>
		<link rel="alternate" type="text/html" href="https://jak.mazovia.edu.pl/index.php?title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje&amp;diff=1041473&amp;oldid=prev"/>
		<updated>2026-10-11T19:37:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pl&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← poprzednia wersja&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Wersja z 19:37, 11 paź 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Linia 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nejčastější chyba &lt;/del&gt;je, že do &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;testu zahrnete skutečný HTTP klient&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ten &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;snaží volat síť, testy jsou pomalé &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;padají podle připojení&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Řešení je jednoduché: síťového klienta nahraďte ručně vytvořenou funkcí&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;která vrací předpřipravená data &lt;/del&gt;nebo &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;chybu&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Stejně tak časovače: pokud async akce používá odložené volání, v testu je nahraďte synchronním spuštěním&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nikdy nespouštějte skutečné čekání&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;testy pak trvají zbytečně dlouho&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Podepisování &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ověřování Pro symetrické podepisování (HS256) používejte dostatečně dlouhý a náhodný klíč&lt;/del&gt;, ideálně &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;z proměnné prostředí&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nikdy ne &lt;/del&gt;v &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kódu&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Asymetrické algoritmy (RS256&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ES256) &lt;/del&gt;jsou &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vhodné&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;když token &lt;/del&gt;vydává &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jedna služba &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ověřuje jiná – veřejný klíč lze bezpečně distribuovat&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Vždy explicitně povolte pouze &lt;/del&gt;jeden &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;algoritmus &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;při ověřování ho vynuťte&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Typická chyba je přijetí algoritmu none nebo toho&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;který útočník vloží do hlavičky&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Totéž platí pro ignorování podpisu u knihoven&lt;/del&gt;, které &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;to umožňují konfigurací&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Volba mezi REST API a GraphQL není otázka modernosti&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale konkrétního tvaru dat a způsobu, jakým &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;klient bude používat&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;REST staví na pevně daných endpointech&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kde každá adresa vrací předem definovanou strukturu. GraphQL nabízí jeden vstupní bod &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;klient si sám určí, která pole potřebuje&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;První &lt;/del&gt;chyba, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kterou lidé dělají&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;je rozhodování podle popularity nástroje místo podle toho, jestli data mají pevnou nebo proměnlivou podobu&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Praktický postup je rozdělit odhad na dvě části. První je čistá práce, kterou umíte pojmenovat. Druhá je režie, kterou odhadnete z historie. Pokud z posledních pěti úkolů vychází, že režie tvořila zhruba třetinu času, použijte stejný podíl i nyní. Nejde o přesné číslo, ale o vědomé zahrnutí místo jeho ignorování. U delších úkolů režie neroste lineárně — čím více lidí a systémů je zapojeno, tím více času spotřebuje koordinace.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nejprve si nainstalujte vývojové prostředí. Stačí Visual Studio Community nebo JetBrains Rider&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;případně VS Code s rozšířením pro C#&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Při instalaci zaškrtněte workload pro &lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;NET desktop development. Pak zvolte šablonu Console App a cílový framework .NET 8 &lt;/del&gt;nebo &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;novější&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokud vytvoříte projekt ve složce s diakritikou nebo mezerami&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;může &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;stát&lt;/del&gt;, že &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;se build zasekne &lt;/del&gt;na &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;neplatné cestě&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Proto používejte názvy jako MojeAplikace bez háčků a mezer&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Co se opravdu stane po stisku F5 Po spuštění &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nejdřív zavolá metoda Main&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;V novějších verzích C# ji nemusíte psát ručně&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kompilátor vygeneruje takzvaný top-level program&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Kód&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;který napíšete &lt;/del&gt;na &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;první řádek souboru Program&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cs&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;se provede jako první&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;To je častý zdroj zmatku: začátečník vloží metodu Main doprostřed a dostane chybu CS8802 nebo CS0017&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Řešení je jednoduché – buď používejte top-level zápis, nebo &lt;/del&gt;všechny &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;metody držte mimo něj a Main nechte jako jedinou vstupní metodu&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;U async akcí jde nejčastěji o thunk. Ten je funkce&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;která přijímá dispatch &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;getState a vrací promise&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Test spočívá v tom, že thunk zavoláte s falešnými funkcemi, počkáte na promise a zkontrolujete&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jaké akce &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dispatchovaly a v jakém pořadí&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pozor na &lt;/del&gt;to, že &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;thunk může dispatchovat jiné thunky. V takovém případě je potřeba je buď rozbalit, nebo testovat jen tu vnější část &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vnitřní řešit zvlášť&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Volba vývojového prostředí pro Python vypadá jako marginálie&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dokud nestrávíte celý den konfigurací rozšíření&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;která si navzájem kradou klávesové zkratky&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;IDE není jen okno s editorem&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Rozhoduje &lt;/del&gt;o &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tom&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jak rychle najdete chybu&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jak snadno spustíte testy &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jestli vůbec pochopíte, co se v kódu děje. Špatná volba se neprojeví hned první den, ale po měsíci zjistíte, že půlku času trávíte bojem s nástrojem místo řešením problému&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Doba platnosti tokenu má být krátká – řádově minuty až hodiny. Pro delší sezení používejte refresh token&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;který je uložen bezpečně (HttpOnly cookie&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nikoli localStorage) a lze ho jednorázově zneplatnit&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Claims jako role nebo oprávnění neberte jako absolutní pravdu&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pokud se mohou změnit během platnosti tokenu. Buď &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ověřujte proti databázi&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nebo zvolte kratší expiraci. Do payloadu nikdy nedávejte citlivé údaje (hesla, rodná čísla&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;čísla karet) – payload je pouze podepsaný&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ne šifrovaný, takže si ho kdokoli přečte.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nepodceňujte ani terminál &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;správu úloh&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;IDE, které umí spouštět příkazy projektu přímo v integrovaném terminálu &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;správným prostředím&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ušetří desítky přepnutí denně. Zkuste si nastavit jeden spouštěcí profil pro testy a jeden pro ladění&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokud to zabere více než několik minut, &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;to další argument proti. Nakonec se ptejte na rychlost hledání v projektu a na to&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zda nástroj umí pracovat s monorepem nebo více kořeny. To jsou věci, které vás budou bolet každý den&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pro oddělení se vyplatí zavést šablony a generátory. Konfigurační soubory pište jako šablony s placeholdery a hodnoty doplňujte při nasazení z bezpečného úložiště. Tím se konfigurace stává reprodukovatelnou a verze kódu určuje, jaké klíče aplikace očekává. Když se změní název proměnné, změní se i šablona, ale hodnoty zůstávají mimo repozitář. Výsledkem &lt;/ins&gt;je, že &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;historie kódu je čistá a konfigurace se dá kdykoli vrátit zpět bez zásahu &lt;/ins&gt;do &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zdrojáků&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Kde &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;čas ztrácí nejčastěji Největší skrytá položka bývá čekání &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;přepínání kontextu&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Čekání na odpověď v diskusi, na schválení pull requestu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;na dostupnost prostředí &lt;/ins&gt;nebo &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;na kolegu, který má jinou práci&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Přepínání mezi úkoly pak snižuje efektivitu — návrat do rozpracovaného problému trvá déle než pár minut&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Do odhadu patří i čas na zapracování po přerušení&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ne jen čistý čas u klávesnice&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Propojení obou repozitářů řešte při nasazení, ne v kódu. Aplikace by měla konfiguraci načítat z předem dané cesty nebo z proměnných prostředí, nikoli odkazovat na konkrétní soubor v repozitáři s kódem. Názvy klíčů &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;strukturu formátu držte v obou repozitářích shodné&lt;/ins&gt;, ideálně &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;popsané jednou šablonou. Když se formát změní&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;upravte šablonu v repozitáři s kódem a hodnoty &lt;/ins&gt;v &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;repozitáři s konfigurací&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Rozdíl odhalíte testem, který ověří&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že všechny povinné klíče &lt;/ins&gt;jsou &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;přítomné.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Rozdělte repozitáře podle toho, kdo co vlastní Prvním krokem je rozhodnout&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;co je kód a co konfigurace. Kód patří vývojářům, prochází review a &lt;/ins&gt;vydává &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;se ve verzích. Konfigurace patří provozu nebo konkrétnímu prostředí &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;často ji spravuje jiný tým&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Založte dva repozitáře: &lt;/ins&gt;jeden &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pro aplikaci, druhý pro konfiguraci. Pokud to nejde kvůli nástrojům, použijte alespoň oddělené větve s ochranou &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jasným vlastníkem&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Do repozitáře s kódem nikdy necommitujte soubory s hesly&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tokeny ani connection stringy&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Místo toho používejte soubory&lt;/ins&gt;, které &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;se načítají z prostředí nebo z externího úložiště&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Na co si dát pozor: nepleť si skryté činnosti s neznámem. Neznámo se řeší prototypem nebo časově ohraničeným průzkumem&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ne přidáním rezervy. Také si neber odhad jako závazek — &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;to predikce za určitých předpokladů&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Když se předpoklady změní&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;změň i odhad &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;řekni to včas&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nejčastější &lt;/ins&gt;chyba &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;není špatné číslo&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale to&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že se o změněných podmínkách mlčí až do konce&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Praktický postup je rozdělit odhad na dvě části. První je čistá práce, kterou umíte pojmenovat. Druhá je režie, kterou odhadnete z historie. Pokud z posledních pěti úkolů vychází, že režie tvořila zhruba třetinu času, použijte stejný podíl i nyní. Nejde o přesné číslo, ale o vědomé zahrnutí místo jeho ignorování. U delších úkolů režie neroste lineárně — čím více lidí a systémů je zapojeno, tím více času spotřebuje koordinace.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Začněte tam&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kde to bolí nejvíc&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nemá smysl zavádět celou kulturu naráz&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Vyberte jednu službu, která se nasazuje ručně, často padá &lt;/ins&gt;nebo &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;na její vydání čeká tým příliš dlouho&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Sepište&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;co všechno &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dnes musí udělat od commitu po běžící verzi. Zjistíte&lt;/ins&gt;, že &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;velká část kroků jsou ruční úkony bez zápisu, které závisí &lt;/ins&gt;na &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jednom člověku&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Právě ty jsou první cíl&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;U větších systémů &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;oba přístupy běžně kombinují&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;REST zůstává pro interní služby a veřejné rozhraní&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;GraphQL se nasadí jako vrstva pro klientské aplikace&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Na co si dát pozor: autorizace musí být v GraphQL řešená na úrovni polí&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ne jen &lt;/ins&gt;na &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vstupním bodě&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Chybí-li kontrola u konkrétních atributů, může klient získat data&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;která mu nepatří&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Stejně tak u REST nepodceňujte verzování&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Změna struktury odpovědi bez nové verze rozbije &lt;/ins&gt;všechny &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;stávající klienty&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Praktické zásady pro GraphQL: nastavte maximální hloubku dotazu, zakažte příliš drahé operace&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;měřte dobu jednotlivých resolverů &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;logujte pomalé dotazy&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;U REST zase hlídejte&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;aby &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;endpointy nezačaly množit podle obrazovek&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Jakmile najdete endpoint typu „vrat-vse-pro-hlavni-stranku&quot;, znamená &lt;/ins&gt;to, že &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;se REST snaží dělat práci GraphQL &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dělá ji špatně&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Když odhaduješ čas na vývojový úkol&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pravděpodobně počítáš s psaním kódu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;testováním a možná code review&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Skryté činnosti ale tvoří často třetinu až polovinu skutečné práce&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nejde &lt;/ins&gt;o &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;práci navíc&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kterou bys měl „přidat jako rezervu&quot; — jde o činnosti&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které reálně nastanou a které je možné pojmenovat &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;odhadnout zvlášť&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Začni tím&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že si před odhadem sepíšeš&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;co všechno bude potřeba udělat před samotným kódem&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Patří sem čtení existujícího kódu, dohledávání&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;proč &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;něco udělané určitým způsobem&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;konzultace s někým&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kdo tomu rozumí&lt;/ins&gt;, a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;příprava testovacích dat&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Tyto činnosti &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;snadno schovají pod „implementaci&quot;&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale mají vlastní trvání&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Když &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vypíšeš jako samostatné položky&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;přestanou být neviditelné&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>BridgetteLeech</name></author>
	</entry>
	<entry>
		<id>https://jak.mazovia.edu.pl/index.php?title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje&amp;diff=1039719&amp;oldid=prev</id>
		<title>DellStrangways0: Utworzono nową stronę &quot;Nejčastější chyba je, že do testu zahrnete skutečný HTTP klient. Ten se snaží volat síť, testy jsou pomalé a padají podle připojení. Řešení je jednoduché: síťového klienta nahraďte ručně vytvořenou funkcí, která vrací předpřipravená data nebo chybu. Stejně tak časovače: pokud async akce používá odložené volání, v testu je nahraďte synchronním spuštěním. Nikdy nespouštějte skutečné čekání, testy pak trvají zbyte…&quot;</title>
		<link rel="alternate" type="text/html" href="https://jak.mazovia.edu.pl/index.php?title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje&amp;diff=1039719&amp;oldid=prev"/>
		<updated>2026-10-11T18:55:00Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;Nejčastější chyba je, že do testu zahrnete skutečný HTTP klient. Ten se snaží volat síť, testy jsou pomalé a padají podle připojení. Řešení je jednoduché: síťového klienta nahraďte ručně vytvořenou funkcí, která vrací předpřipravená data nebo chybu. Stejně tak časovače: pokud async akce používá odložené volání, v testu je nahraďte synchronním spuštěním. Nikdy nespouštějte skutečné čekání, testy pak trvají zbyte…&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Nejčastější chyba je, že do testu zahrnete skutečný HTTP klient. Ten se snaží volat síť, testy jsou pomalé a padají podle připojení. Řešení je jednoduché: síťového klienta nahraďte ručně vytvořenou funkcí, která vrací předpřipravená data nebo chybu. Stejně tak časovače: pokud async akce používá odložené volání, v testu je nahraďte synchronním spuštěním. Nikdy nespouštějte skutečné čekání, testy pak trvají zbytečně dlouho.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Podepisování a ověřování Pro symetrické podepisování (HS256) používejte dostatečně dlouhý a náhodný klíč, ideálně z proměnné prostředí, nikdy ne v kódu. Asymetrické algoritmy (RS256, ES256) jsou vhodné, když token vydává jedna služba a ověřuje jiná – veřejný klíč lze bezpečně distribuovat. Vždy explicitně povolte pouze jeden algoritmus a při ověřování ho vynuťte. Typická chyba je přijetí algoritmu none nebo toho, který útočník vloží do hlavičky. Totéž platí pro ignorování podpisu u knihoven, které to umožňují konfigurací.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Volba mezi REST API a GraphQL není otázka modernosti, ale konkrétního tvaru dat a způsobu, jakým je klient bude používat. REST staví na pevně daných endpointech, kde každá adresa vrací předem definovanou strukturu. GraphQL nabízí jeden vstupní bod a klient si sám určí, která pole potřebuje. První chyba, kterou lidé dělají, je rozhodování podle popularity nástroje místo podle toho, jestli data mají pevnou nebo proměnlivou podobu.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Praktický postup je rozdělit odhad na dvě části. První je čistá práce, kterou umíte pojmenovat. Druhá je režie, kterou odhadnete z historie. Pokud z posledních pěti úkolů vychází, že režie tvořila zhruba třetinu času, použijte stejný podíl i nyní. Nejde o přesné číslo, ale o vědomé zahrnutí místo jeho ignorování. U delších úkolů režie neroste lineárně — čím více lidí a systémů je zapojeno, tím více času spotřebuje koordinace.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nejprve si nainstalujte vývojové prostředí. Stačí Visual Studio Community nebo JetBrains Rider, případně VS Code s rozšířením pro C#. Při instalaci zaškrtněte workload pro .NET desktop development. Pak zvolte šablonu Console App a cílový framework .NET 8 nebo novější. Pokud vytvoříte projekt ve složce s diakritikou nebo mezerami, může se stát, že se build zasekne na neplatné cestě. Proto používejte názvy jako MojeAplikace bez háčků a mezer.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Co se opravdu stane po stisku F5 Po spuštění se nejdřív zavolá metoda Main. V novějších verzích C# ji nemusíte psát ručně, kompilátor vygeneruje takzvaný top-level program. Kód, který napíšete na první řádek souboru Program.cs, se provede jako první. To je častý zdroj zmatku: začátečník vloží metodu Main doprostřed a dostane chybu CS8802 nebo CS0017. Řešení je jednoduché – buď používejte top-level zápis, nebo všechny metody držte mimo něj a Main nechte jako jedinou vstupní metodu.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;U async akcí jde nejčastěji o thunk. Ten je funkce, která přijímá dispatch a getState a vrací promise. Test spočívá v tom, že thunk zavoláte s falešnými funkcemi, počkáte na promise a zkontrolujete, jaké akce se dispatchovaly a v jakém pořadí. Pozor na to, že thunk může dispatchovat jiné thunky. V takovém případě je potřeba je buď rozbalit, nebo testovat jen tu vnější část a vnitřní řešit zvlášť.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Volba vývojového prostředí pro Python vypadá jako marginálie, dokud nestrávíte celý den konfigurací rozšíření, která si navzájem kradou klávesové zkratky. IDE není jen okno s editorem. Rozhoduje o tom, jak rychle najdete chybu, jak snadno spustíte testy a jestli vůbec pochopíte, co se v kódu děje. Špatná volba se neprojeví hned první den, ale po měsíci zjistíte, že půlku času trávíte bojem s nástrojem místo řešením problému.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Doba platnosti tokenu má být krátká – řádově minuty až hodiny. Pro delší sezení používejte refresh token, který je uložen bezpečně (HttpOnly cookie, nikoli localStorage) a lze ho jednorázově zneplatnit. Claims jako role nebo oprávnění neberte jako absolutní pravdu, pokud se mohou změnit během platnosti tokenu. Buď je ověřujte proti databázi, nebo zvolte kratší expiraci. Do payloadu nikdy nedávejte citlivé údaje (hesla, rodná čísla, čísla karet) – payload je pouze podepsaný, ne šifrovaný, takže si ho kdokoli přečte.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nepodceňujte ani terminál a správu úloh. IDE, které umí spouštět příkazy projektu přímo v integrovaném terminálu se správným prostředím, ušetří desítky přepnutí denně. Zkuste si nastavit jeden spouštěcí profil pro testy a jeden pro ladění. Pokud to zabere více než několik minut, je to další argument proti. Nakonec se ptejte na rychlost hledání v projektu a na to, zda nástroj umí pracovat s monorepem nebo více kořeny. To jsou věci, které vás budou bolet každý den.&lt;/div&gt;</summary>
		<author><name>DellStrangways0</name></author>
	</entry>
</feed>