GraphQL.cz/Články/GraphQL vs. REST

Jak se vyhnout over-fetching a under-fetching s GraphQL?

Praktické rady a tipy, jak GraphQL pomáhá vyřešit problémy s over-fetching a under-fetching typické pro REST API.

686 slov
6.9 minut čtení
15. 2. 2020
Martin Černý

V dnešním digitálním světě plném datových toků a mikroservisů se vývojáři často potýkají s otázkou, jak efektivně spravovat data. Dnes se podíváme na dva hlavní problémy, které mnozí z nás znají až příliš dobře – over-fetching a under-fetching. Pokud jste se někdy snažili získat data z REST API a zjistili jste, že vám server vrací buď příliš mnoho informací, nebo naopak nedostatek potřebných dat, pak víte, o čem mluvím. A právě zde přichází na scénu GraphQL – revoluční technologie, která slibuje, že tyto problémy vyřeší.

Co je to over-fetching a under-fetching?

Než se dostaneme k tomu, jak nám může GraphQL pomoci, pojďme si ujasnit, co přesně tyto termíny znamenají. Over-fetching nastává, když server vrátí více dat, než kolik klient skutečně potřebuje. Například pokud si požádáte o informace o uživatelském profilu a dostanete nejen jméno a e-mail, ale také veškerou historii nákupů nebo adresy bydliště – všechno zbytečné. Na druhé straně under-fetching nastává tehdy, když server vrátí méně dat, než klient potřebuje. To znamená, že budete muset provést další dotaz na server pro získání chybějících informací.

Jak GraphQL řeší tyto problémy?

A nyní přichází na řadu náš hrdina – GraphQL! Tato technologie navržená Facebookem v roce 2012 nabízí elegantní řešení obou problémů. Jak? Pojďme se na to podívat blíže.

1. Flexibilita dotazování

Jednou z největších výhod GraphQL je jeho flexibilita. Když posíláte dotaz na server, můžete přesně specifikovat, jaká data chcete vrátit. To znamená, že můžete požádat o konkrétní pole, jako je jméno, věk nebo e-mail, a nemusíte se obávat toho, že byste dostali zbytečné informace navíc. V praxi to vypadá takto:

query \{
  uživatel(id: "123") \{
    jméno
    e-mail
  \}
\}

Tímto způsobem zabráníte over-fetchingu a získáte pouze ta data, která skutečně potřebujete.

2. Soubory dotazů

Další zajímavou funkcí GraphQL je schopnost provádět vícero dotazů v jednom požadavku. Místo abyste museli posílat několik různých požadavků na server jako u REST API (což může vést k under-fetchingu), můžete poslat jeden komplexní dotaz a získat všechna potřebná data najednou. To výrazně zjednodušuje komunikaci se serverem a šetří čas i zdroje.

3. Složené dotazy a fragmenty

GraphQL také podporuje složené dotazy a fragmenty. To znamená, že si můžete definovat části dotazu (fragmenty), které můžete opakovaně používat v různých částech svého kódu. Řekněme například, že často potřebujete informace o uživatelích a jejich příspěvcích. Můžete vytvořit fragment pro uživatelský profil a použít ho tam, kde ho potřebujete bez opakování celého kódu.

fragment uživatelskýProfil on Uživatelský \{
  jméno
  e-mail
\}

query \{
  uživatel(id: "123") \{
    ...uživatelskýProfil
    příspěvky \{
      titulek
    \}
  \}
\}

4. Efektivní načítání dat (DataLoader)

Kromě flexibility dotazování má GraphQL také možnosti pro optimalizaci načítání dat. Například knihovna DataLoader umožňuje seskupit více požadavků do jednoho za účelem snížení počtu dotazů na databázi. Tím eliminujeme problém s under-fetching tím, že efektivně načteme všechna potřebná data najednou místo toho, abychom posílali jednotlivé požadavky.

5. Typový systém a introspekce

GraphQL také přichází s robustním typovým systémem. Každé pole má jasně definovaný typ dat (např. String, Int), což usnadňuje práci vývojářům při vytváření dotazů i při ladění chyb. Introspekce vám navíc umožňuje prozkoumávat schéma API za běhu – což znamená rychlé ověření toho, jaká data jsou k dispozici bez nutnosti procházet dokumentací.

Proč přejít na GraphQL?

Pokud ještě váháte nad tím, zda přejít z REST API na GraphQL kvůli problémům s over-fetchingem a under-fetchingem, zvažte následující faktory:

  • Zvýšená efektivita: Méně datových přenosů znamená rychlejší načítání stránek.
  • Lepší uživatelský zážitek: Uživatelé budou mít pocit zvýšeného výkonu aplikace.
  • Snadnější údržba: S menším množstvím požadavků se vaše aplikace stává jednodušší na údržbu.
  • Flexibilita pro budoucnost: Snadná adaptace na měnící se potřeby aplikace díky flexibilnímu dotazování.

Závěr: Využití GraphQL naplno

Takže shrňme to: pokud chcete vyřešit problémy s over-fetchingem a under-fetchingem ve svých aplikacích, GraphQL je vaší tajnou zbraní! Jeho flexibilita v dotazování umožňuje přesně specifikovat data podle potřeby a tím šetřit čas i zdroje jak pro vás jako vývojáře, tak pro vaše uživatele.

Pokud vás tato problematika zajímá dále nebo byste chtěli vědět více o dalších aspektech GraphQL, neváhejte se podívat na naše další články! Na GraphQL.cz najdete spoustu užitečných informací a příkladů ze světa moderního vývoje aplikací.

23174 přečtení článku
441 lajků
15. 2. 2020
Martin Černý
  • GraphQL

  • over-fetching

  • under-fetching

  • REST API

  • flexibilita dotazování

O autorovi

Martin Černý

API architekt s 15letou praxí v oboru. Začínal s REST API

Dotazy k článku