5 situací, kdy se REST API a GraphQL chovají odlišně

Z Mazovia

Migrace z MySQL do PostgreSQL není jen změna připojovacího řetězce. Oba systémy mají odlišnou filozofii: MySQL toleruje nejednoznačnosti, PostgreSQL je přísnější a vyžaduje přesné typy. Prvním krokem je proto inventura schématu. Zjistit, které tabulky používají ENGINE=MyISAM (nemají transakce), kde jsou uložené procedury, triggery a pohledy. Tyto objekty se nikdy nepřenesou automaticky a je nutné je přepsat ručně.

Mezi časté chyby patří testování pouze na nejnovější verzi systému, ignorování chování offline a opomenutí rotace displeje. Další problém je testování na zařízeních, která mají příliš mnoho aplikací na pozadí, takže výsledky neodpovídají realitě běžného uživatele. Vyplatí se také sledovat výkon: dobu startu, spotřebu paměti a plynulost posouvání. Pomalá aplikace působí dojmem chyby i tehdy, když logicky funguje správně.

Samotný přenos dat se dělá nejlépe přes CSV nebo generovaný SQL dump. Nástroje pro přímý převod často selžou na okrajových případech, proto je spolehlivější exportovat data z MySQL do textových souborů a načíst je přes příkaz COPY. Pozor na kódování: MySQL často používá latin1 nebo utf8mb3, zatímco PostgreSQL standardně utf8. Před exportem ověřte, že všechny řetězce jsou v UTF-8, jinak se diakritika rozsype. Datum a čas ukládejte včetně časové zóny, jinak přijdete o informaci.

Rozdíl mezi testováním na zařízení a v emulátoru Emulátor nebo simulátor urychlí vývoj, protože umožní rychlé spouštění a snadné ladění. Nikdy ale neodhalí problémy specifické pro konkrétní hardware, jako je přehřívání, přesnost dotyku nebo spotřeba baterie. Proto je nutné mít sadu reálných zařízení, i když menší. Rozumný přístup je testovat průběžně na jednom nebo dvou fyzických telefonech a zbývající kombinace verzí a velikostí displeje pokrýt pomocí cloudových zařízení nebo emulátorů.

Pro datové vstupy použijte fixture soubory nebo továrny na testovací data. Místo ručního vytváření objektů v každém testu definujte šablony s výchozími hodnotami a v konkrétních testech měňte jen to, co je podstatné. Vazby mezi daty simulujte pomocí jednoduchých struktur, které respektují referenční integritu. Například místo skutečné databáze použijte kolekci v paměti, která se na začátku testu naplní a na konci vyčistí. Pokud testujete chování při výpadku, simulujte chyby – vyhoďte výjimku, nastavte časový limit nebo vracejte neúplná data.

Volba licence není otázkou ideologie, ale toho, jak chcete, aby se váš kód šířil a kdo ho může použít. Permisivní licence (MIT, Apache 2.0, BSD) říkají: dělej si s kódem, co chceš, jen zachovej atribuci. Copyleftové licence (GPL, AGPL, LGPL) naopak vyžadují, aby odvozená díla zůstala pod stejnou licencí. První krok je vždy stejný: napište si na papír, co od projektu očekáváte. Chcete maximální adopci? Chcete, aby váš kód nemohl někdo uzavřít a prodávat jako proprietární produkt? Odpověď určí směr.

Prvních pár minut v C# rozhoduje o tom, jestli tě programování chytne, nebo odradí. Většina začátečníků zbytečně tráví čas studiem teorie a pak narazí na to, že vlastně neumí spustit ani jednoduchý program. Přitom stačí nainstalovat .NET SDK a jeden editor. Bez SDK tvůj kód nepoběží, i kdybys měl sebelepší vývojové prostředí. Po instalaci si ověř v terminálu příkaz dotnet --version. Když vypíše číslo, máš vyhráno.

Nakonec se rozhodujte podle týmu a ekosystému. Pokud máte tým zvyklý na REST, knihovny a monitoring, přechod na GraphQL znamená učení a nové nástroje. Pokud stavíte klienta, který potřebuje rychle měnit pohledy na data, GraphQL může ušetřit spoustu práce. Často dává smysl kombinace: REST pro jednoduché a stabilní operace, GraphQL pro složité čtení. Vyberte podle konkrétních dotazů, ne podle toho, co je zrovna moderní.

Verzování a změny schématu řeší oba přístupy jinak. REST obvykle verzuje v URL nebo v hlavičce, GraphQL zavádí nová pole a stará označí jako deprecated. U RESTu se ale snadno stane, že klienti používají staré verze a vy je musíte držet dlouho. U GraphQL zase hrozí, že klient pošle dotaz na pole, které jste odstranili. Vždy zveřejněte pravidla, jak dlouho budou stará pole nebo verze fungovat, a mějte přehled o tom, kdo co volá.

Posledním krokem je testování. Nestačí, že se data načtou. Spusťte všechny aplikace proti nové databázi a porovnejte výsledky dotazů. Zaměřte se na řazení textu – MySQL má jiné implicitní collation než PostgreSQL, takže ORDER BY může vracet jiné pořadí. Zkontrolujte také výkon: PostgreSQL neumí INDEX na prvních N znacích jako MySQL, ale nabízí výkonnější částečné indexy. Po nasazení sledujte pomalé dotazy a podle potřeby dolaďte parametry work_mem a shared_buffers.