Jak zajistit API pomocí JWT tokenů: Difference between revisions

From Rikkiepedia
Jump to navigation Jump to search
Created page with "Jak napsat životopis, který si přečtou Životopis pro IT se liší od běžných profesí. Nezačínejte motivačním dopisem o vaší lásce k technologiím – personalisté to čtou každý den. Místo toho hned na začátek uveďte, jaké technologie ovládáte a na jaké úrovni. Rozdělte je na „aktivně používám" a „mám základní přehled". Nikdy nepřehánějte, protože pohovor obvykle zahrnuje praktický úkol, kde se vaše skutečné znalosti prov..."
 
mNo edit summary
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
Jak napsat životopis, který si přečtou Životopis pro IT se liší od běžných profesí. Nezačínejte motivačním dopisem o vaší lásce k technologiím – personalisté to čtou každý den. Místo toho hned na začátek uveďte, jaké technologie ovládáte a na jaké úrovni. Rozdělte je na „aktivně používám" a „mám základní přehled". Nikdy nepřehánějte, protože pohovor obvykle zahrnuje praktický úkol, kde se vaše skutečné znalosti prověří. Do životopisu také zahrňte odkazy na vaše projekty, ale pouze na ty, které jsou veřejně přístupné a fungují.<br><br>Při práci na více feature větvích také vždy synchronizujte svůj lokální repozitář s originem, ale ne jen jednou na začátku. Průběžně si stahujte změny z mainu a rebasujte svou větev. Můžete si nastavit automatický fetch, ale raději si na to udělejte zvyk. Klíčem je, aby vaše větev nebyla nikdy příliš vzdálená od mainu. Pokud na ní pracujete déle než týden, zvažte, zda nemá smysl rozdělit ji na menší části, které lze dílčím způsobem začlenit.<br><br>Nakonec si uvědomte, že první práce vývojáře není o tom, že budete hned psát složité systémy. Bude to spousta učení, opravování chyb a čtení cizího kódu. Nebojte se požádat o zpětnou vazbu po každém pohovoru, ať už dopadl jakkoli. Využijte i možnost práce na zkoušku nebo stáže i když je placená hůře, získané zkušenosti a kontakty vám otevřou dveře k lepším příležitostem. Trpělivost a soustavná práce se vyplatí, za pár měsíců si budete připadat jako jinde.<br><br>Většina začínajících vývojářů řeší stejný paradox: firmy chtějí zkušenosti, ale odkud je vzít, když vás nikdo nechce zaměstnat? Řešení neleží v neustálém posílání životopisů, ale v cíleném budování dovedností, které jsou na trhu žádané. Než začnete rozesílat přihlášky, zjistěte si, jaké technologie se ve vašem regionu skutečně používají. Projděte si inzeráty na pozice juniorů a všimněte si, které jazyky a frameworky se opakují. Tento průzkum vám ušetří měsíce učení něčeho, co nikdo nehledá.<br><br>Na pohovoru se připravte na to, že budete vysvětlovat své projekty. Neříkejte jen, že jste je vytvořili – popište, jakou architekturu jste zvolili, s jakými problémy jste se setkali a jak jste je vyřešili. Očekávejte také otázky na základní algoritmy a datové struktury, třeba na třídění pole nebo složitost operací. Pokud něco nevíte, přiznejte to a vysvětlete, jak byste postupovali při hledání odpovědi – schopnost učit se je u juniorů důležitější než znalosti zpaměti.<br><br>Když začnete psát první unit test, nejčastější chybou je snaha pokrýt najednou příliš mnoho logiky. Test by měl ověřovat přesně jednu věc – jednu funkci, jednu metodu, jeden scénář. Než začnete, otevřete si kód, který chcete testovat, a napište si na papír tři základní věci: co funkce přijímá, co vrací a jaké má vedlejší efekty. Pokud funkce komunikuje s databází, soubory nebo sítí, test se výrazně zkomplikuje – proto je lepší začít u čistých funkcí, které jen zpracují vstup a vrátí výstup.<br><br>Doporučuji také pravidelně porovnávat odhady se skutečností. Po dokončení úkolu si zapište, kolik času reálně zabral, a toto číslo porovnejte s odhadem. Po pár projektech získáte vlastní historická data, která vám umožní kalibrovat budoucí odhady. Pokud máte tendenci podhodnocovat, zvyšte odhad o koeficient (např. 1,5). Tento koeficient si ale musíte odvodit sami – je unikátní pro každý tým a typ práce.<br><br>Nakonec nezapomeňte, že odhad je vždy pravděpodobnostní, ne jistota. Dobrý odhad by měl být rozložen na optimistickou, realistickou a pesimistickou variantu. Pro plánování projektu používejte realistickou až pesimistickou. Optimistická hodnota je vhodná jen pro motivační účely, ne pro slibování termínů. Pokud se odhady často liší o více než 30 %, zaměřte se na zlepšení rozkladu úkolů a sběr dat – to je cesta k trvalejší přesnosti.<br><br>Pro udržení čisté historie je klíčové pravidelně rebase proti hlavní větvi, ne merge. Rebase přepíše historii tak, že vaše commity navazují na aktuální stav mainu, což usnadňuje pozdější začlenění. Při rebase ale pozor na konflikty – řešte je hned, neodkládejte. Pokud konflikty vznikají opakovaně ve stejných souborech, je to signál, že byste měli komunikovat s kolegy, kdo na čem pracuje, a případně si rozdělit soubory, aby se předešlo zbytečným srážkám.<br><br>Prakticky implementujte middleware, který token zpracuje. Ten by měl vyjmout token z hlavičky Authorization ve formátu Bearer, ověřit ho a připojit informace o uživateli k požadavku. Vždy řešte chyby pomocí HTTP status kódů – 401 pro neplatný token, 403 pro nedostatečná práva. Vyhněte se logování celých tokenů, stačí logovat ID uživatele a čas platnosti.
Pro jednoduché aplikace, které potřebují standardní CRUD operace, je REST jasnou volbou. Pokud máte veřejné API, které budou používat tisíce vývojářů, REST usnadňuje dokumentaci i verzování. Stačí dodržovat HTTP metody a stavové kódy, a klienti hned vědí, co se děje. Vyhnete se také problémům s cachováním, protože REST umí dobře využít HTTP cache. Typická chyba? Snažit se RESTem obejít tím, že vytvoříte deset různých endpointů pro jednu obrazovku. To je signál, že byste měli přemýšlet o GraphQL.<br><br>Když procházíte historii projektu, každá commit zpráva by měla odpovědět na dvě otázky: co se změnilo a proč. Většina vývojářů ale píše zprávy jako „oprava bugu" nebo „úpravy". Takové popisy jsou k ničemu, protože neříkají, co přesně se dělo, a hlavně proč. Bez kontextu se po pár měsících vracíte k hádankám a musíte ručně procházet diff, abyste zjistili, co se vlastně stalo. Cílem není psát romány, ale dodat dostatek informací, aby se kdokoli v historii rychle zorientoval.<br><br>Častou chybou je psát zprávy v minulém čase, jako byste popisovali hotovou věc. Lepší je použít rozkazovací způsob nebo přítomný čas, protože to odpovídá tomu, co commit dělá, když je aplikován. Například „Přidej testy pro přihlášení" je jasné a akční. Vyhněte se také vágním slovům jako „úpravy", „oprava" nebo „refaktoring" pokud neřeknou, co konkrétně je upraveno, opraveno nebo refaktorováno. Vždy doplňte, co je předmětem změny, ať už jde o soubor, funkci nebo chování.<br><br>Závěrem: REST zvolte, pokud hledáte jednoduchost, stabilitu a kompatibilitu. GraphQL, pokud potřebujete flexibilitu a efektivní práci s daty. Nebojte se kombinovat obojí v rámci jedné aplikace. Nejdůležitější je, aby API sloužilo vašim klientům, ne naopak. Otestujte obě varianty na malém vzorku a vyberte tu, která vám dává smysl.<br><br>Při validaci tokenu na serveru vždy kontrolujte tři věci: podpis, expiraci a issuer (kdo token vydal). Ignorování těchto kontrol vede k bezpečnostním děrám. Například pokud neověřujete issuer, útočník může podepsat token vlastním klíčem a vydávat ho za váš. Také si dejte pozor na algoritmus „none", který někteří starší klienti používají – ten musí být na serveru tvrdě zakázán.<br><br>Při výběru berte v potaz velikost týmu a čas na vývoj. GraphQL se nevyplácí u malých projektů s úzkou doménou, kde by bylo schéma zbytečně složité. REST je tu rychlejší a přehlednější. Naopak pokud víte, že budete API rozšiřovat a klienti si budou žádat stále nové kombinace dat, GraphQL vám ušetří nekonečné přidávání endpointů. Typický kompromis: použijte REST pro veřejné API a GraphQL pro interní služby. Tím získáte to nejlepší z obou světů.<br><br>Když v jednom projektu kombinujete více jazyků, narazíte na dvě základní úskalí: udržení konzistence terminologie a správu překladů bez zbytečné duplicity. Nejprve si proto definujte, které části kódu, dokumentace nebo uživatelského rozhraní budou jazykově závislé. Oddělte je do samostatných souborů nebo modulů, ať nemusíte při změně textu zasahovat do logiky aplikace. Ideální je vytvořit si složkovou strukturu, kde každý jazyk má vlastní adresář, ale sdílí stejné klíče pro překlady.<br><br>Dalším bodem je délka zprávy. Krátké shrnutí je povinné, ale podrobný popis by měl být maximálně pár odstavců. Pokud potřebujete vysvětlit více, je lepší rozdělit změny na menší commity. Nepište ale ani zprávy, které jsou jen shrnutím diffu – to je zbytečné. Místo toho se zaměřte na kontext: jaké problémy změna řeší, jaké jsou její vedlejší účinky, co by mohlo být překvapivé. Tím pomůžete kolegům i budoucímu sobě.<br><br>Při práci s více jazyky se vyplatí zavést automatizovanou kontrolu chybějících překladů. Můžete si napsat skript, který projde všechny jazykové soubory a porovná je s referenčním jazykem. Pokud nějaký klíč chybí, skript vypíše varování. Tento postup je rychlejší než ruční kontrola a minimalizuje riziko, že v ostrém nasazení uživatel uvidí prázdný text. Stejně tak je vhodné pravidelně kontrolovat, že žádný překlad neobsahuje HTML značky nebo proměnné, které by mohly narušit vzhled stránky.<br><br>Klíčové je rozlišovat mezi „co" a „proč". Diff vám ukáže, co se změnilo, ale ne proč. Proto v popisu vždy vysvětlete důvod. Například místo „Změněna barva tlačítka" napište „Změněna barva tlačítka na tmavší, aby byl lépe viditelný na světlém pozadí". Taková informace šetří čas při revizi kódu i při budoucí údržbě. Pokud je změna složitější, rozdělte ji do více commitů, ať každý dělá jednu věc. To usnadní reverz a hledání příčiny chyb.

Latest revision as of 18:11, 21 August 2026

Pro jednoduché aplikace, které potřebují standardní CRUD operace, je REST jasnou volbou. Pokud máte veřejné API, které budou používat tisíce vývojářů, REST usnadňuje dokumentaci i verzování. Stačí dodržovat HTTP metody a stavové kódy, a klienti hned vědí, co se děje. Vyhnete se také problémům s cachováním, protože REST umí dobře využít HTTP cache. Typická chyba? Snažit se RESTem obejít tím, že vytvoříte deset různých endpointů pro jednu obrazovku. To je signál, že byste měli přemýšlet o GraphQL.

Když procházíte historii projektu, každá commit zpráva by měla odpovědět na dvě otázky: co se změnilo a proč. Většina vývojářů ale píše zprávy jako „oprava bugu" nebo „úpravy". Takové popisy jsou k ničemu, protože neříkají, co přesně se dělo, a hlavně proč. Bez kontextu se po pár měsících vracíte k hádankám a musíte ručně procházet diff, abyste zjistili, co se vlastně stalo. Cílem není psát romány, ale dodat dostatek informací, aby se kdokoli v historii rychle zorientoval.

Častou chybou je psát zprávy v minulém čase, jako byste popisovali hotovou věc. Lepší je použít rozkazovací způsob nebo přítomný čas, protože to odpovídá tomu, co commit dělá, když je aplikován. Například „Přidej testy pro přihlášení" je jasné a akční. Vyhněte se také vágním slovům jako „úpravy", „oprava" nebo „refaktoring" – pokud neřeknou, co konkrétně je upraveno, opraveno nebo refaktorováno. Vždy doplňte, co je předmětem změny, ať už jde o soubor, funkci nebo chování.

Závěrem: REST zvolte, pokud hledáte jednoduchost, stabilitu a kompatibilitu. GraphQL, pokud potřebujete flexibilitu a efektivní práci s daty. Nebojte se kombinovat obojí v rámci jedné aplikace. Nejdůležitější je, aby API sloužilo vašim klientům, ne naopak. Otestujte obě varianty na malém vzorku a vyberte tu, která vám dává smysl.

Při validaci tokenu na serveru vždy kontrolujte tři věci: podpis, expiraci a issuer (kdo token vydal). Ignorování těchto kontrol vede k bezpečnostním děrám. Například pokud neověřujete issuer, útočník může podepsat token vlastním klíčem a vydávat ho za váš. Také si dejte pozor na algoritmus „none", který někteří starší klienti používají – ten musí být na serveru tvrdě zakázán.

Při výběru berte v potaz velikost týmu a čas na vývoj. GraphQL se nevyplácí u malých projektů s úzkou doménou, kde by bylo schéma zbytečně složité. REST je tu rychlejší a přehlednější. Naopak pokud víte, že budete API rozšiřovat a klienti si budou žádat stále nové kombinace dat, GraphQL vám ušetří nekonečné přidávání endpointů. Typický kompromis: použijte REST pro veřejné API a GraphQL pro interní služby. Tím získáte to nejlepší z obou světů.

Když v jednom projektu kombinujete více jazyků, narazíte na dvě základní úskalí: udržení konzistence terminologie a správu překladů bez zbytečné duplicity. Nejprve si proto definujte, které části kódu, dokumentace nebo uživatelského rozhraní budou jazykově závislé. Oddělte je do samostatných souborů nebo modulů, ať nemusíte při změně textu zasahovat do logiky aplikace. Ideální je vytvořit si složkovou strukturu, kde každý jazyk má vlastní adresář, ale sdílí stejné klíče pro překlady.

Dalším bodem je délka zprávy. Krátké shrnutí je povinné, ale podrobný popis by měl být maximálně pár odstavců. Pokud potřebujete vysvětlit více, je lepší rozdělit změny na menší commity. Nepište ale ani zprávy, které jsou jen shrnutím diffu – to je zbytečné. Místo toho se zaměřte na kontext: jaké problémy změna řeší, jaké jsou její vedlejší účinky, co by mohlo být překvapivé. Tím pomůžete kolegům i budoucímu sobě.

Při práci s více jazyky se vyplatí zavést automatizovanou kontrolu chybějících překladů. Můžete si napsat skript, který projde všechny jazykové soubory a porovná je s referenčním jazykem. Pokud nějaký klíč chybí, skript vypíše varování. Tento postup je rychlejší než ruční kontrola a minimalizuje riziko, že v ostrém nasazení uživatel uvidí prázdný text. Stejně tak je vhodné pravidelně kontrolovat, že žádný překlad neobsahuje HTML značky nebo proměnné, které by mohly narušit vzhled stránky.

Klíčové je rozlišovat mezi „co" a „proč". Diff vám ukáže, co se změnilo, ale ne proč. Proto v popisu vždy vysvětlete důvod. Například místo „Změněna barva tlačítka" napište „Změněna barva tlačítka na tmavší, aby byl lépe viditelný na světlém pozadí". Taková informace šetří čas při revizi kódu i při budoucí údržbě. Pokud je změna složitější, rozdělte ji do více commitů, ať každý dělá jednu věc. To usnadní reverz a hledání příčiny chyb.