GraphQL vs REST — klíčové rozdíly
V REST API má každý zdroj svůj endpoint (/api/users, /api/products, /api/orders). Pokud potřebujete data z více zdrojů, musíte provést více požadavků. Navíc každý endpoint vrací pevně danou strukturu dat — i když potřebujete jen jméno uživatele, dostanete celý profil. GraphQL řeší oba problémy: máte jeden endpoint, posíláte přesný dotaz a dostáváte přesná data. To snižuje objem přenesených dat a počet HTTP požadavků.
Jak GraphQL dotaz vypadá
GraphQL dotaz připomíná JSON bez hodnot. Chcete jméno a email uživatele s jeho posledními 3 objednávkami? Napíšete query { user(id: 1) { name, email, orders(last: 3) { total, date } } }. Server vrátí přesně tuto strukturu s daty. Schema definuje, jaké dotazy jsou povolené a jaké typy dat existují. To vytváří silný kontrakt mezi klientem a serverem a funguje jako živá dokumentace API.
Kdy použít GraphQL a kdy REST
GraphQL se vyplatí u aplikací s komplexními datovými vztahy (e-shopy, sociální sítě, dashboardy), kde různé části UI potřebují různá data ze stejných zdrojů. Také je výhodný pro mobilní aplikace, kde záleží na objemu dat. REST je jednodušší pro základní CRUD operace, menší API a projekty, kde je struktura dat pevně daná. V praxi se oba přístupy mohou v jednom projektu kombinovat — GraphQL pro čtení, REST pro jednoduché akce.
GraphQL v ekosystému Next.js
V kombinaci s Next.js se GraphQL výborně doplňuje. Apollo Client nebo urql na straně klienta umožňují deklarativní data fetching v React komponentách. Na serveru můžete použít Apollo Server nebo graphql-yoga. Shopify a další e-commerce platformy nabízejí GraphQL API jako primární rozhraní — Storefront API pro frontend a Admin API pro správu. Headless CMS jako Contentful, Hygraph nebo Strapi také podporují GraphQL pro dotazování obsahu.
Praktický příklad
Představte si stránku e-shopu s detailem produktu. Potřebujete název, cenu, popis, obrázky, kategorii, recenze (průměrné hodnocení a posledních 5 recenzí) a doporučené produkty. S REST API byste museli volat /products/123, /products/123/reviews, /products/123/recommendations — tři požadavky. S GraphQL pošlete jeden dotaz, který přesně popíše, co potřebujete, a dostanete vše najednou. Rychlejší, efektivnější, přehlednější.