Kdy REST ničí výkon a GraphQL zbytečně komplikuje: Różnice pomiędzy wersjami

Z Mazovia
Utworzono nową stronę "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…"
 
mNie podano opisu zmian
 
Linia 1: Linia 1:
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.<br><br>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í.<br><br>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.<br><br>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.<br><br>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.<br><br>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.<br><br>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ášť.<br><br>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.<br><br>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.<br><br>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.
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 je, že historie kódu je čistá a konfigurace se dá kdykoli vrátit zpět bez zásahu do zdrojáků.<br><br>Kde se čas ztrácí nejčastěji Největší skrytá položka bývá čekání a přepínání kontextu. Čekání na odpověď v diskusi, na schválení pull requestu, na dostupnost prostředí nebo na kolegu, který má jinou práci. Přepínání mezi úkoly pak snižuje efektivitu — návrat do rozpracovaného problému trvá déle než pár minut. Do odhadu patří i čas na zapracování po přerušení, ne jen čistý čas u klávesnice.<br><br>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íčů a strukturu formátu držte v obou repozitářích shodné, ideálně popsané jednou šablonou. Když se formát změní, upravte šablonu v repozitáři s kódem a hodnoty v repozitáři s konfigurací. Rozdíl odhalíte testem, který ověří, že všechny povinné klíče jsou přítomné.<br><br>Rozdělte repozitáře podle toho, kdo co vlastní Prvním krokem je rozhodnout, co je kód a co konfigurace. Kód patří vývojářům, prochází review a vydává se ve verzích. Konfigurace patří provozu nebo konkrétnímu prostředí a často ji spravuje jiný tým. Založte dva repozitáře: jeden pro aplikaci, druhý pro konfiguraci. Pokud to nejde kvůli nástrojům, použijte alespoň oddělené větve s ochranou a jasným vlastníkem. Do repozitáře s kódem nikdy necommitujte soubory s hesly, tokeny ani connection stringy. Místo toho používejte soubory, které se načítají z prostředí nebo z externího úložiště.<br><br>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, ne přidáním rezervy. Také si neber odhad jako závazek — je to predikce za určitých předpokladů. Když se předpoklady změní, změň i odhad a řekni to včas. Nejčastější chyba není špatné číslo, ale to, že se o změněných podmínkách mlčí až do konce.<br><br>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.<br><br>Začněte tam, kde to bolí nejvíc. Nemá smysl zavádět celou kulturu naráz. Vyberte jednu službu, která se nasazuje ručně, často padá nebo na její vydání čeká tým příliš dlouho. Sepište, co všechno se dnes musí udělat od commitu po běžící verzi. Zjistíte, že velká část kroků jsou ruční úkony bez zápisu, které závisí na jednom člověku. Právě ty jsou první cíl.<br><br>U větších systémů se oba přístupy běžně kombinují. REST zůstává pro interní služby a veřejné rozhraní, GraphQL se nasadí jako vrstva pro klientské aplikace. Na co si dát pozor: autorizace musí být v GraphQL řešená na úrovni polí, ne jen na vstupním bodě. Chybí-li kontrola u konkrétních atributů, může klient získat data, která mu nepatří. Stejně tak u REST nepodceňujte verzování. Změna struktury odpovědi bez nové verze rozbije všechny stávající klienty.<br><br>Praktické zásady pro GraphQL: nastavte maximální hloubku dotazu, zakažte příliš drahé operace, měřte dobu jednotlivých resolverů a logujte pomalé dotazy. U REST zase hlídejte, aby se endpointy nezačaly množit podle obrazovek. Jakmile najdete endpoint typu „vrat-vse-pro-hlavni-stranku", znamená to, že se REST snaží dělat práci GraphQL a dělá ji špatně.<br><br>Když odhaduješ čas na vývojový úkol, pravděpodobně počítáš s psaním kódu, testováním a možná code review. Skryté činnosti ale tvoří často třetinu až polovinu skutečné práce. Nejde o práci navíc, kterou bys měl „přidat jako rezervu" — jde o činnosti, které reálně nastanou a které je možné pojmenovat a odhadnout zvlášť.<br><br>Začni tím, že si před odhadem sepíšeš, co všechno bude potřeba udělat před samotným kódem. Patří sem čtení existujícího kódu, dohledávání, proč je něco udělané určitým způsobem, konzultace s někým, kdo tomu rozumí, a příprava testovacích dat. Tyto činnosti se snadno schovají pod „implementaci", ale mají vlastní trvání. Když je vypíšeš jako samostatné položky, přestanou být neviditelné.

Aktualna wersja na dzień 19:37, 11 paź 2026

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 je, že historie kódu je čistá a konfigurace se dá kdykoli vrátit zpět bez zásahu do zdrojáků.

Kde se čas ztrácí nejčastěji Největší skrytá položka bývá čekání a přepínání kontextu. Čekání na odpověď v diskusi, na schválení pull requestu, na dostupnost prostředí nebo na kolegu, který má jinou práci. Přepínání mezi úkoly pak snižuje efektivitu — návrat do rozpracovaného problému trvá déle než pár minut. Do odhadu patří i čas na zapracování po přerušení, ne jen čistý čas u klávesnice.

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íčů a strukturu formátu držte v obou repozitářích shodné, ideálně popsané jednou šablonou. Když se formát změní, upravte šablonu v repozitáři s kódem a hodnoty v repozitáři s konfigurací. Rozdíl odhalíte testem, který ověří, že všechny povinné klíče jsou přítomné.

Rozdělte repozitáře podle toho, kdo co vlastní Prvním krokem je rozhodnout, co je kód a co konfigurace. Kód patří vývojářům, prochází review a vydává se ve verzích. Konfigurace patří provozu nebo konkrétnímu prostředí a často ji spravuje jiný tým. Založte dva repozitáře: jeden pro aplikaci, druhý pro konfiguraci. Pokud to nejde kvůli nástrojům, použijte alespoň oddělené větve s ochranou a jasným vlastníkem. Do repozitáře s kódem nikdy necommitujte soubory s hesly, tokeny ani connection stringy. Místo toho používejte soubory, které se načítají z prostředí nebo z externího úložiště.

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, ne přidáním rezervy. Také si neber odhad jako závazek — je to predikce za určitých předpokladů. Když se předpoklady změní, změň i odhad a řekni to včas. Nejčastější chyba není špatné číslo, ale to, že se o změněných podmínkách mlčí až do konce.

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.

Začněte tam, kde to bolí nejvíc. Nemá smysl zavádět celou kulturu naráz. Vyberte jednu službu, která se nasazuje ručně, často padá nebo na její vydání čeká tým příliš dlouho. Sepište, co všechno se dnes musí udělat od commitu po běžící verzi. Zjistíte, že velká část kroků jsou ruční úkony bez zápisu, které závisí na jednom člověku. Právě ty jsou první cíl.

U větších systémů se oba přístupy běžně kombinují. REST zůstává pro interní služby a veřejné rozhraní, GraphQL se nasadí jako vrstva pro klientské aplikace. Na co si dát pozor: autorizace musí být v GraphQL řešená na úrovni polí, ne jen na vstupním bodě. Chybí-li kontrola u konkrétních atributů, může klient získat data, která mu nepatří. Stejně tak u REST nepodceňujte verzování. Změna struktury odpovědi bez nové verze rozbije všechny stávající klienty.

Praktické zásady pro GraphQL: nastavte maximální hloubku dotazu, zakažte příliš drahé operace, měřte dobu jednotlivých resolverů a logujte pomalé dotazy. U REST zase hlídejte, aby se endpointy nezačaly množit podle obrazovek. Jakmile najdete endpoint typu „vrat-vse-pro-hlavni-stranku", znamená to, že se REST snaží dělat práci GraphQL a dělá ji špatně.

Když odhaduješ čas na vývojový úkol, pravděpodobně počítáš s psaním kódu, testováním a možná code review. Skryté činnosti ale tvoří často třetinu až polovinu skutečné práce. Nejde o práci navíc, kterou bys měl „přidat jako rezervu" — jde o činnosti, které reálně nastanou a které je možné pojmenovat a odhadnout zvlášť.

Začni tím, že si před odhadem sepíšeš, co všechno bude potřeba udělat před samotným kódem. Patří sem čtení existujícího kódu, dohledávání, proč je něco udělané určitým způsobem, konzultace s někým, kdo tomu rozumí, a příprava testovacích dat. Tyto činnosti se snadno schovají pod „implementaci", ale mají vlastní trvání. Když je vypíšeš jako samostatné položky, přestanou být neviditelné.