GraphQL.cz/Fórum/Jaké jsou příklady použití direktiv v GraphQL dotazech?

Jaké jsou příklady použití direktiv v GraphQL dotazech?

Přemýšlím, jaké všechny možnosti nám vlastně direktivy v GraphQL poskytují. Je to prý pěkný způsob, jak ovlivnit, jak se dotazy vykonávají, ale osobně bych rád viděl pár konkrétních příkladů. Jak se vlastně používají ty základní direktivy jako @include nebo @skip? Mohli byste uvést nějaké situace, kdy by se tyto direktivy daly výhodně aplikovat? Napadá mě, že třeba když máte komponentu, která zobrazuje seznam produktů a chcete na základě nějakého stavu rozhodnout, zda se má nějaký prvek zobrazit nebo ne. Ale zajímá mě to víc do hloubky. Jak by takový dotaz mohl vypadat? A co třeba další direktivy, které nejsou tak běžné? Existuje něco jako vlastní direktivy a jak je implementovat? Mám pocit, že tyto věci by mohly hodně usnadnit práci při práci s daty. Obecně by mě zajímalo, jak můžeme efektivně využít tyto funkce v reálných aplikacích. Vím, že GraphQL je docela komplexní technologie a direktivy jsou jen jednou částí celého obrazu, ale rád bych se dozvěděl víc o tom, jak je lidé používají v každodenní praxi.

167 slov
1.7 minut čtení
3. 11. 2023
Ladislav Tomeš
Ladislav Tomeš

Direktivy v GraphQL, jako @include a @skip, jsou fajn věc, jak ovlivnit, co se vlastně vrací. Třeba pokud máš komponentu s produktem a chceš na základě nějakého stavu (třeba jestli je uživatel přihlášený nebo ne) rozhodnout, co se má zobrazit, použiješ @include. Můžeš mít dotaz na produkt, který vypadá takhle:

query GetProduct($showPrice: Boolean!) \{
  product(id: "1") \{
    name
    price @include(if: $showPrice)
  \}
\}

Takže když $showPrice je true, vrátí se i cena, jinak ne. U @skip to funguje jako opak - vrátí se něco jen když podmínka není splněna. To je super pro optimalizaci dotazů a snižování zbytečných dat.

Kromě těchhle dvou základních můžeš vytvořit vlastní direktivy pro specifické potřeby. Například pokud potřebuješ něco jako @deprecated pro označení zastaralých polí, tak to můžeš implementovat ve svém schématu. Vlastní direktivy ale potřebují trochu víc práce, protože musíš napsat logiku na serverové straně.

Celkově direktivy šetří množství dat a zjednodušují dotazy – prostě skvělý nástroj pro efektivní práci s API. V praxi se hodí například při renderování conditionally v UI aplikacích, kde chceš mít čistější a přehlednější dotazy.

179 slov
1.8 minut čtení
27. 11. 2024
Kateřina Adámková
Kateřina Adámková

Direktivy v GraphQL jsou fakt užitečný nástroj, jak ovlivnit, co se ve tvých dotazech vykoná. Ty základní jako @include a @skip se hodí třeba v situacích, kdy chceš dynamicky řídit, co se vrátí na základě nějaké podmínky. Například, pokud máš komponentu pro zobrazení produktů a chceš na základě toho, jestli je uživatel přihlášený nebo ne, rozhodnout, jestli se má zobrazit tlačítko pro koupi, můžeš to udělat takhle:

query GetProducts($showBuyButton: Boolean!) \{
  products \{
    id
    name
    price
    buyButton @include(if: $showBuyButton) \{
      text
      url
    \}
  \}
\}

Tady když nastavíš showBuyButton na true v proměnných dotazu, tak se tlačítko zobrazí. Když je false, tak ne. Podobně funguje @skip. Pokud bys chtěl něco přeskočit na základě stavu, můžeš to použít v obráceném smyslu.

Kromě těchto dvou základních direktiv můžeš klidně vytvořit i vlastní direktivy. Tím si rozšíříš možnosti GraphQL podle svých potřeb. Například můžeš udělat direktivu pro logování nebo kontrolu oprávnění. Implementace vlastních direktiv obvykle zahrnuje definici schématu a pak napsání resolveru, který zpracovává logiku.

V reálných aplikacích to všechno pomáhá udržet dotazy čisté a efektivní, protože ti to dává víc kontroly nad tím, co se vrací na základě aktuálního stavu aplikace. S těmito možnostmi si můžeš dost usnadnit práci s daty.

221 slov
2.2 minut čtení
20. 1. 2025
Eduard Rybář
Eduard Rybář

Direktivy v GraphQL jsou fakt užitečný nástroj. Ty základní jako @include a @skip ti umožňují dynamicky rozhodovat, co se má vrátit na základě podmínek. Například, když máš komponentu, která zobrazuje seznam produktů a chceš nechat uživatele vybrat, jestli chce vidět jen dostupné zboží nebo všechny, můžeš použít @include. Dotaz by mohl vypadat asi takhle:

query GetProducts($showAvailable: Boolean!) \{
  products \{
    id
    name
    available @include(if: $showAvailable)
  \}
\}

Tady, pokud $showAvailable je true, tak se zobrazí i dostupnost produktu.

Pak je tu i @skip, což je opačné. Třeba když máš nějaký filtr a podle toho, jestli je filtr aktivní, tak vynecháš třeba nějaké informace. Dotaz:

query GetProducts($skipDetails: Boolean!) \{
  products \{
    id
    name
    details @skip(if: $skipDetails)
  \}
\}

Pokud $skipDetails je true, tak se details vůbec nevrátí.

Co se týče vlastních direktiv, ty můžeš vytvořit taky. Například můžeš mít direktivu pro logování nebo nějakou specifickou manipulaci s daty. To už je ale trochu složitější a záleží na serveru, jak to implementuješ.

V praxi se direktivy fakt hodí na optimalizaci dotazů a zjednodušení správy dat podle aktuálního stavu aplikace. Můžeš tím ušetřit bandwidth a snížit čas načítání, což je vždycky fajn.

204 slov
2 minut čtení
7. 1. 2025
Ladislav Sedláček
Ladislav Sedláček
Podobné otázky