Middlewary a pořadí, které rozhoduje Middleware jsou funkce, které dostanou požadavek, odpověď a funkci pro předání dál. Pořadí registrace určuje, co se stane dřív. Pokud dáš obecný middleware pro tělo až za routy, routy uvidí prázdný objekt a budeš hledat chybu zbytečně dlouho. Stejně tak odchytávač chyb se čtyřmi argumenty musí být zaregistrován jako poslední, jinak ho Express nezavolá. Do middlewaru patří i ověřování vstupu, logování a autentizace.
Portfolio místo kolonky „prax
První návyk se týká izolace. Každý test musí být nezávislý na pořadí, v jakém ho runner spustí, a nesmí měnit stav, který ovlivní ostatní testy. V praxi to znamená, že sdílená data nevytváříte v jednorázovém setupu na úrovni třídy, pokud je testy pouze čtou a nikdy nemění. Jakmile test zapisuje do statické kolekce, do souboru nebo do databáze, potřebuje vlastní instanci. NUnit k tomu nabízí atributy [SetUp] a [TearDown], které se volají před a po každém testu, nikoli před a po celé třídě. Záměna těchto úrovní je nejčastější příčina testů, které procházejí samostatně, ale padají ve skupině.
Testování jednotek v C# s NUnit vypadá na první pohled jednoduše: napíšete metodu, ozdobíte ji atributem [Test], spustíte runner a hotovo. Jenže rozdíl mezi sadou testů, která vám vydrží roky, a sadou, kterou po měsíci přestanete spouštět, netkví v syntaxi. Tkví v návycích, které se kolem psaní testů vytvoří. Následující čtyři zásady pokrývají většinu problémů, na které při práci s NUnit narazíte.
Základem obrany je používat parametrizované dotazy nebo prepared statements. Databázový ovladač pošle strukturu dotazu zvlášť a hodnoty zvlášť, takže vstup nikdy nezmění syntaxi příkazu. V praxi to znamená, že místo skládání řetězce s proměnnou uvnitř dotazu předáte hodnotu jako vázaný parametr. Tento přístup podporuje většina moderních knihoven a frameworků. Pokud používáte ORM, ověřte, že i přímé dotazy v něm jsou parametrizované, protože některé metody umožňují vložit surový řetězec.
Čtvrtý návyk je práce s výjimkami a parametrizací. Pro očekávané výjimky používejte Assert.Throws nebo Assert.That s Throws.TypeOf, nikdy ne obalení do try-catch s prázdným blokem. Parametrizované testy s [TestCase] nebo [TestCaseSource] ušetří desítky metod a zpřehlední hraniční hodnoty. Pozor ale na přílišnou abstrakci: pokud parametr mění i logiku testu, ne jen vstup, patří zvlášť. Nakonec testy pravidelně spouštějte lokálně i v rámci sestavení, jinak ztratí smysl. Test, který se nespouští, je jen komentář s horší syntaxí.
Základ vypadá takto: vytvoříš instanci aplikace, zaregistruješ middleware pro čtení JSON a definuješ routy pomocí metod odpovídajících HTTP slovesům. Pro kolekci zdrojů použij množné číslo v cestě, například cesta k seznamu položek. Parametry v cestě zachytíš dvojtečkou a čteš je z objektu požadavku. Návratové kódy nejsou dekorace: 200 pro úspěch, 201 při vytvoření, 204 při smazání bez těla, 400 při chybném vstupu, 404 když zdroj neexistuje.
Výběr prvního programovacího jazyka bývá zbytečně dramatizovaný. Rozhodnutí není doživotní a většina lidí, kteří dnes programují, jich během let vystřídala několik. Přesto se vyplatí začít s něčím, co vás udrží u učení a nebude vás odrazovat hned v prvních dnech. Nejlepší jazyk pro začátek je ten, který odpovídá tomu, co chcete skutečně vytvořit.
Node.js sám o sobě nabízí jen holý HTTP server. Vytvořit v něm REST API znamená ručně řešit routování, parsování těla požadavku, hlavičky i chybové stavy. Express je minimalistická vrstva, která tyto opakující se úkoly zastřeší, aniž by ti vzala kontrolu nad během aplikace. Instalace je otázkou jednoho příkazu v terminálu a prvních pár řádků kódu už vrací odpověď.
Jak poznat, že je jazyk pro vás ten pravý Dobrý první jazyk má tři vlastnosti: je čitelný, rychle vrací výsledky a najdete k němu dost materiálů v češtině i angličtině. Čitelnost znamená, že kód dokážete přečíst nahlas a tušíte, co dělá. Rychlá zpětná vazba znamená, že po pár řádcích vidíte výsledek, ne že se týden učíte teorii. Materiály pak rozhodují o tom, jestli se zaseknete na dva dny, nebo si poradíte za hodinu.
Typická chyba začátečníka je zapomenutý návrat při odeslání odpovědi. Když pošleš odpověď a kód pokračuje dál, skončíš s chybou o odeslání hlaviček po jejich odeslání. Pomáhá psát kód tak, že každá větev končí buď odesláním, nebo předáním chyby. Asynchronní obsluhy rout bez bloku try/catch tiší výjimky do neznáma; buď je obal, nebo použij knihovnu, která promise chyby předá do odchytávače.
Add new comment