Kdy zvolit REST a kdy GraphQL? Rozhodující faktory

Z Mazovia

Testování mobilních aplikací se často podceňuje. Tým spěchá na termín, ruční testy proběhnou narychlo a první ostré nasazení odhalí, že aplikace padá na starších telefonech nebo že se uživatelé nedostanou k platbě. Přitom stačí dodržet několik základních pravidel a většině problémů se vyhnete.

Další věc, na kterou se zaměřit, je verzování API. U REST běžně verzujete pomocí URL (např. /v1/), u GraphQL se verzování obvykle řeší postupnými změnami schématu bez ostrých řezů. To je výhoda, ale jen pokud vaše týmová komunikace funguje dobře. Pokud máte externí partnery, kteří na vašem API staví, GraphQL může být problematický – změny v schématu mohou nenápadně rozbít jejich aplikace. REST s číslovanými verzemi dává jasný signál, že se něco mění.

Druhý častý problém je odhadování jedním číslem. Místo toho si vytvořte tři scénáře: optimistický, realistický a pesimistický. Optimistický předpokládá, že vše půjde hladce, realistický počítá s běžnými překážkami a pesimistický zahrnuje i neočekávané komplikace. Výsledný odhad pak berte z realistického scénáře, ale termín vždy komunikujte s vědomím pesimistické varianty. Tím si vytvoříte rezervu, kterou můžete využít, když se něco pokazí.

REST je vhodný, když máte jasně definované zdroje a operace nad nimi. Typicky jde o CRUD aplikace, kde každý endpoint odpovídá jedné entitě – uživatel, objednávka, produkt. Výhodou je jednoduchost a předvídatelnost. Klient ví, že GET na konkrétní adresu vrátí vždy stejnou strukturu. To usnadňuje cacheování, logování i testování. Pokud ale potřebujete data z více zdrojů najednou, REST vás nutí k několika requestům, což může zpomalit aplikaci a zkomplikovat práci klienta.

Začněte tím, že si ujasníte rozdíl mezi testováním na emulátoru a na reálném zařízení. Emulátor je rychlý a levný, ale neodhalí problémy s výkonem, s GPS, s fotoaparátem nebo s citlivostí dotykové obrazovky. Pro prvotní ověření logiky aplikace ho používejte, ale před vydáním vždy testujte na minimálně pěti reálných zařízeních s různými verzemi operačního systému a různým rozlišením.

Konečně, nepodceňujte použití HTTPS. Token putuje v hlavičce Authorization a pokud běží komunikace po nezabezpečeném kanálu, může ho kdokoli odposlechnout. Vždy používejte HTTPS a nikdy token nevkládejte do URL, protože URL se loguje do serverových logů a může se dostat do rukou nepovolaným. Místo toho ho posílejte v hlavičce a vyhněte se i ukládání do localStorage, které je zranitelné vůči XSS. Bezpečnějším místem je cookie s atributem HttpOnly, ale to vyžaduje zvážit ochranu proti CSRF. Celkově platí: JWT je nástroj, ne kouzelná hůlka. Bezpečnost stojí na správné konfiguraci, důkladné validaci a neustálé ostražitosti.

GraphQL řeší právě problém „příliš mnoho requestů" tím, že umožňuje v jednom dotazu získat přesně ta data, která potřebujete, a nic navíc. To oceníte u mobilních aplikací s omezeným datovým tarifem nebo u komplexních dashboardů, kde se kombinují data z různých částí systému. Místo aby server diktoval, co klient dostane, klient si definuje tvar odpovědi. Typickým příkladem je eshop, kde chcete zobrazit produkt, jeho varianty a skladové zásoby najednou – s GraphQL to zvládnete jedním voláním, s REST byste museli tři.

Proč se odhady nejčastěji nedaří Nejčastější chybou je odhadování na základě „ideálního dne". Vývojář předpokládá, že bude osm hodin v kuse psát kód bez přerušení, porad a e-mailů. Realita je jiná: meetingy, code review, řešení produkčních chyb nebo nečekané závislosti na jiném týmu. Pokud do odhadu nezapočítáte režii, dostanete se do skluzu hned na začátku. Doporučuji použít faktor režie – pokud si myslíte, že úkol zabere 10 hodin čisté práce, počítejte s 12 až 15 hodinami reálného času.

Pamatujte, že pyramida není statická. S tím, jak se mění architektura aplikace, mění se i poměr testů. Na začátku projektu můžete mít více integračních testů, protože ještě nemáte stabilní rozhraní pro mockování. Po pár měsících se hranice ustálí a vy je převedete na jednotkové. Klíčové je pravidelně revidovat testovací sadu: jednou za kvartál se podívejte, které testy nikdy neselhávají, které opakovaně vyžadují opravy a které už neodpovídají aktuálnímu chování systému. Testy, které nikdo nespouští nebo jim nikdo nerozumí, jsou horší než žádné — dávají falešný pocit bezpečí.

Čtvrtý princip se týká historických dat. Pokud vedete záznamy o tom, jak dlouho trvaly předchozí úkoly, použijte je pro budoucí odhady. Pokud podobná funkce minule zabrala 14 dní, je nepravděpodobné, že tentokrát bude hotová za 3 dny, pokud se zásadně nezměnil tým nebo postup. Sbírejte data průběžně – po dokončení úkolu si poznamenejte skutečný čas, ne jen plánovaný. Po několika projektech uvidíte své vlastní vzorce: kde se obvykle zpožďujete, co podceňujete a co naopak přeceňujete. Tyto poznatky jsou cennější než jakýkoli obecný vzorec.