První kroky s API: praktický průvodce pro začátečníky
Nejdůležitější dovednost: číst chybové odpovědi Chyby nejsou nepřítel, ale zpětná vazba. Když server vrátí status 404, neznamená to „selhal jsem", ale „adresa neexistuje". Status 401 nebo 403 zase říká, že nemáš oprávnění. Místo paniky se nauč číst hlavičky odpovědi a tělo chyby. Mnoho API vrací detailní popis problému v JSON. Zkopíruj si chybovou hlášku do vyhledávače (ale pozor, ne sem) a najdeš řešení. Typická začátečnická chyba je ignorovat status a rovnou zpracovávat data, která možná ani nepřišla.
Častou chybou je také odhadování času pouze na základě „čisté" práce, tedy bez přestávek, schůzek, e-mailů nebo řešení naléhavých požadavků. I když se snažíte být soustředění, realita je taková, že váš pracovní den není jen programování. Zahrňte do odhadu i čas na přepínání kontextu. Pokud máte na úkol vyčleněné dva dny, ale každý den máte dvě hodiny schůzek, efektivní pracovní doba je jen šest hodin denně. Odhad by měl vycházet z reálné kapacity, ne z toho, kolik hodin byste chtěli strávit.
Typickým problémem je rozdílné chování funkcí pro práci s datem a časem. V MySQL používáte NOW(), v PostgreSQL je to CURRENT_TIMESTAMP – ale pozor, v PostgreSQL vrací timestamp s časovým pásmem, což může ovlivnit porovnávání. Také funkce pro zaokrouhlování, řetězové agregace (GROUP_CONCAT v MySQL, string_agg v PostgreSQL) a práce s NULL mají odlišnou sémantiku. Doporučuji před migrací projít všechny uložené procedury, triggery a pohledy a upravit je ručně – automatické konvertory často selhávají na složitější logice.
Na závěr si osvoj pravidlo, které ušetří hodiny práce: nejdřív si data prohlédni v příkazové řádce, až potom je zapoj do aplikace. Napiš si malý test, který ověří, že API vrací očekávaný tvar. Tím předejdeš situaci, kdy tvůj kód spadne kvůli tomu, že jedno pole má jiný název, než předpokládáš. S takovým základem zvládneš první projekt s API bez zbytečného tápání.
Když už zvládáš jednoduché volání, zkus přidat parametry dotazu. Třeba pro filtr nebo stránkování. To je častý bod, kde začátečníci tápou – nevědí, jestli parametry patří do URL, nebo do těla. Pro GET je používej v URL za otazníkem, pro POST je dej do těla jako JSON. Vždy si přečti dokumentaci konkrétního API, protože formát se liší. A hlavně: nikdy neposílej citlivé údaje v URL – může se ti to vymstít v logách.
Ladění asynchronního kódu a práce s proměnnými Asynchronní JavaScript (callbacks, Promise, async/await) je častým zdrojem chyb, protože kód se nevykonává lineárně. V panelu Sources využijte tlačítko „Step into next function call" – umožní vám vstoupit i do asynchronních operací. Vždy si ověřte, zda máte v nástrojích zapnutou volbu „Pause on caught exceptions" (Pozastavit u zachycených výjimek). Tato funkce vás upozorní na chyby, které by jinak byly tiše polknuty blokem try…catch. Mnoho vývojářů tuto volbu přehlédne a poté marně hledá příčinu, proč se kód chová jinak, než očekávají.
Nakonec si osvojte pravidlo zpětné vazby. Po dokončení úkolu si poznamenejte, kolik času jste skutečně strávili a které činnosti vám zabraly nejvíc. Porovnejte to s odhadem. Postupně zjistíte, kde jsou vaše slepá místa – jestli podceňujete testování, dokumentaci nebo řešení závislostí. Tímto způsobem se odhady zlepšují přirozeně, bez stresu z nesplněných termínů. Nezapomeňte, že odhad je vždy jen pravděpodobnostní – ale s vědomým zahrnutím skrytých činností budete mnohem blíž realitě.
Dalším užitečným nástrojem je podmíněný breakpoint. Pokud se chyba projevuje pouze při určité hodnotě proměnné (např. když je user.id rovno 42), klikněte pravým tlačítkem na číslo řádku a vyberte „Add conditional breakpoint". Do pole zadejte podmínku – výraz, který se vyhodnotí jako pravda nebo nepravda. Prohlížeč pak zastaví běh pouze tehdy, když je podmínka splněna. Ušetříte tím spoustu času, protože nemusíte procházet tisíce průchodů smyčkou. Pozor ale na to, že podmínka se vyhodnocuje při každém průchodu – pokud obsahuje vedlejší efekt (např. volání funkce), může ovlivnit běh programu.
Když se kód zastaví na breakpointu, můžete v konzoli přímo psát výrazy a zjišťovat tak aktuální hodnoty – stačí do konzole napsat název proměnné nebo zavolat funkci. Tímto způsobem můžete měnit obsah proměnných za běhu, což je užitečné pro testování okrajových případů. Například pokud funkce selhává na prázdném poli, vložte do konzole seznam = [] a pokračujte v krokování. Tento postup je rychlejší než opakované načítání stránky a zadávání nových vstupů.
Selektory by měly být jediným místem, kde čtete data ze store. Pomocí knihovny reselect lze snadno vytvářet memoizované selektory, které se přepočítávají jen když se změní vstupní části stavu. To zabrání zbytečnému renderování komponent a zvýší výkon. Vyhněte se přímému přístupu ke store v komponentách – používejte hooky useSelector a useDispatch. Jasně oddělte prezentační komponenty (které jen zobrazují data) od kontejnerových (které mají přístup k Redux). Díky tomu bude kód snadno testovatelný a znovupoužitelný.