Když data rostou, navrhněte API s offsetem i kurzorem
Filtry definujte jako explicitní parametry Filtrování neřešte jako volný text. Každý filtr by měl mít vlastní parametr s jasným typem a povolenými hodnotami. Například stav=aktivni, vytvoreno_od=2024-01-01, min_castka=100. Vyhněte se univerzálnímu q, které hledá ve všech sloupcích. Je pomalé, nepředvídatelné a špatně se indexuje. Pokud potřebujete fulltext, oddělte ho do samostatného parametru a indexujte cíleně. Vždy validujte vstupní hodnoty a vracejte srozumitelnou chybu, když filtr neodpovídá schématu.
Základem je rozdělit testy podle toho, co skutečně ověřují. Jednotkový test by měl být rychlý, deterministický a měl by testovat jednu logickou jednotku bez závislosti na okolí. Jakmile test potřebuje databázi, síť nebo souborový systém, přestává být jednotkovým a měl by se přesunout do integrační vrstvy. Toto rozdělení není akademické cvičení. Umožňuje spouštět jednotkové testy při každé změně a integrační testy v pomalejším cyklu. Bez tohoto oddělení budete buď čekat na všechny testy, nebo riskovat, že vám proteče chyba, kterou odhalí jen integrace.
Kdy je správný čas přestat přidávat a začít spravovat Typická chyba je snaha otestovat všechno najednou. Výsledkem je pomalý testovací běh, křehké testy závislé na datech v databázi a frustrace, která vede k vypnutí testů. Místo toho držte testy izolované. Každý test si připraví vlastní data, každý test po sobě uklidí. Nepoužívejte produkční databázi ani cizí testovací prostředí, kde vám data mění někdo jiný. Pokud test potřebuje síť nebo externí službu, nahraďte ji jednoduchou atrapou, která vrací předvídatelnou odpověď.
Typické chyby: návrat celkového počtu total u každého požadavku, i když ho klient nepotřebuje. Počítání přes celou tabulku je drahé. Dále ignorování maximálního limitu — bez max_limit někdo pošle limit=100000 a srazí server. Chybí také stabilní formát odpovědi. Klient by měl vždy dostat stejnou obálku: osvětlení v obýváku data, metadata a odkaz na další stránku. U kurzorové paginace nikdy neposílejte holý offset jako kurzor, protože se rozbije při změnách dat.
U velkých datových sad nestačí vrátit celou tabulku. Paginace a filtrování patří do kontraktu API od prvního dne. Každý endpoint, který vrací kolekci, musí mít jasně definované parametry pro stránkování a filtry. Here's more info regarding nábytek na míru visit the web-page. Pokud je vynecháte, první verze projde, ale při milionu řádků přestane stačit výkon i klient.
Základem je správné používání let a const. const neznamená neměnnou hodnotu, ale neměnnou vazbu — objekt přiřazený do const můžeš dál měnit, jen ho nesmíš přeřadit. Typická chyba je snaha použít const na čítač v cyklu, což skončí chybou. Naopak let v cyklu for vytváří novou vazbu v každé iteraci, takže asynchronní kód uvnitř smyčky funguje podle očekávání. Právě tady dřív vznikal klasický problém se var, kdy všechny callbacks viděly poslední hodnotu.
Řazení musí být deterministické. Bez jednoznačného klíče v ORDER BY může databáze vracet stejné řádky v různém pořadí mezi stránkami. To platí zejména pro offsetovou paginaci. Přidejte vždy unikátní sloupec, například ID, jako poslední kritérium řazení. U kurzorové paginace musí kurzor obsahovat všechny sloupce z ORDER BY, jinak se stránky mohou přeskočit nebo zopakovat.
První krok je najít hranice. Aplikace má vstupy a výstupy, a právě na nich se testy vyplatí nejvíc. Vyberte tři až pět klíčových funkcí nebo endpointů, které mají jasný vstup a jasný výstup. Pro každou napište test, který ověří normální případ, a pak hned druhý, který ověří krajní hodnotu nebo chybný vstup. Tím vznikne malá sada, která se dá spouštět rychle a která něco skutečně kontroluje.
Před nasazením otestujte chování na datech, která rostou. Simulujte vkládání během stránkování, ověřte, že se řádky neopakují ani nemizí. Změřte dobu odezvy pro první a poslední stránku. Pokud používáte offset, sledujte, jak roste čas s rostoucím offsetem. Kurzorová paginace bývá pomalejší na první stránce, ale stabilní dál. Dokumentujte oba režimy a nechte klienta zvolit, pokud to dává smysl. Konzistence a předvídatelnost jsou důležitější než elegance parametrů.
Základem je krátký, výstižný předmět. Napiš ho v rozkazovacím způsobu, jako bys dával příkaz kódu: „Oprav chybu při načítání profilu", „Přidej validaci e-mailu". Drž se jednoho tématu na jeden commit. Pokud jsi opravil dvě různé věci, rozděl je do dvou commitů. Míchání nesouvisejících změn do jedné zprávy nutí ostatní přemýšlet, co vlastně ten commit dělá, a při hledání viníka regrese se ztrácí čas.
Co do zprávy patří a co ne Předmět by měl mít ideálně do padesáti znaků, tělo zprávy odděl prázdným řádkem. V těle vysvětli, proč ke změně došlo, ne jak – to je vidět z diffu. Uveď kontext: „Původní řešení selhávalo při souběžném přístupu, proto přidávám zámek." Pokud opravuješ chybu, uveď číslo issue nebo odkaz na diskusi, ale pouze pokud to má smysl pro budoucí čtenáře. Vyhni se frázím jako „oprava chyby" nebo „různé úpravy". Takové zprávy nikomu nepomohou, protože za měsíc nebudeš vědět, kterou chybu jsi myslel.