GraphQL.cz/Fórum/Dotaz na příklad použití fragmentů v GraphQL

Dotaz na příklad použití fragmentů v GraphQL

Mám takovou otázku ohledně fragmentů v GraphQL. Slyšel jsem, že jsou to jako takové šablony nebo kousky dotazů, které můžeme znovu používat, ale úplně tomu nerozumím. Jak přesně to funguje? Můžete mi ukázat nějaký konkrétní příklad, jak se fragmenty používají? Například, když mám vícero dotazů, které potřebují stejná pole z nějakého objektu, jak bych mohl použít fragmenty, abych se vyhnul opakování kódu? Taky by mě zajímalo, jestli je to nějak efektivnější z hlediska přenosu dat nebo výkonu. A co když chci upravit nějaké pole v jednom fragmentu? Jak to ovlivní ostatní dotazy, které ten fragment používají? Mám pocit, že to může být docela užitečné, ale zatím jsem neviděl žádný příklad, který by mi to dostatečně přiblížil. Takže prosím, pokud můžete, dejte mi vědět, jak to celé funguje a třeba i nějaké konkrétní ukázky, které bych si mohl prohlédnout a pochopit to lépe.

142 slov
1.4 minut čtení
18. 12. 2024
Anna Havlová

Jo, fragmenty v GraphQL jsou fakt super věc. Jde o to, že si můžeš vytvořit nějakou šablonu pro dotaz a pak ji znovu použít víckrát, což šetří místo a zjednodušuje údržbu. Třeba máš objekt "User" a chceš získat pole jako "id", "name" a "email" ve vícero dotazech. Místo toho, abys to psal pokaždé znovu, uděláš fragment:

fragment userFields on User \{
  id
  name
  email
\}

A pak ho můžeš použít v několika dotazech:

query getUsers \{
  users \{
    ...userFields
  \}
\}

query getUserById($id: ID!) \{
  user(id: $id) \{
    ...userFields
  \}
\}

Takže místo opakování kódu jen prostě přidáš fragment. Co se týče efektivity, tak to snižuje množství dat, co se posílá, protože server ti vrátí jen to, co potřebuješ. Když změníš něco v fragmentu, ovlivní to všechny dotazy, co ho používají. Takže když najednou potřebuješ třeba přidat "address", upravíš fragment a máš to všude hotový. Snad to pomůže!

153 slov
1.5 minut čtení
7. 1. 2025
Lenka Havlíková

Fragmenty v GraphQL jsou fakt užitečný způsob, jak si šetřit práci. Můžeš si vytvořit fragment, co obsahuje pole, který chceš používat v několika dotazech. Tím pádem se vyhneš tomu, abys je musel neustále opakovat, což je prostě super. Třeba, když máš objekt typu User a chceš pokaždé vytáhnout id, name a email, můžeš to udělat takhle:

Nejdřív definuješ fragment:

fragment UserFields on User \{
  id
  name
  email
\}

Pak ho použiješ v dotazu:

query GetUsers \{
  users \{
    ...UserFields
  \}
\}

query GetUserById($id: ID!) \{
  user(id: $id) \{
    ...UserFields
  \}
\}

Takže místo toho, abys pořád psal id, name, email, jenom použiješ ...UserFields. Co se týče efektivity přenosu dat nebo výkonu, tak to není moc o tom. Fragmenty ti usnadní strukturování kódu a udržování, ale server stejně odešle všechna data, co požaduješ.

Pokud potřebuješ upravit pole ve fragmentu, tak to ovlivní všechny dotazy, co ten fragment používaj. Takže když změníš něco v UserFields, tak se to promítne všude, kde jsi ho použil. Je to fajn způsob, jak mít konzistentní data bez zbytečného opakování. Takhle to funguje docela jednoduše.

181 slov
1.8 minut čtení
23. 11. 2024
Viktor Hloušek

Fragmenty v GraphQL fakt ulehčujou život, když potřebuješ opakovat stejný pole v různých dotazech. V podstatě to funguje tak, že si vytvoříš fragment s těma polema, co chceš sdílet, a pak ho použiješ v těch dotazech. Tady je příklad:

Máš třeba dotaz na uživatele a chceš vždycky vypsat jméno a email. Tak si vytvoříš fragment:

fragment UserFields on User \{
  name
  email
\}

A pak to použiješ v dotazu:

query GetUsers \{
  users \{
    ...UserFields
  \}
\}

A pokud bys měl další dotaz, kde chceš stejný pole:

query GetUserById($id: ID!) \{
  user(id: $id) \{
    ...UserFields
  \}
\}

Tímhle způsobem se vyhneš opakování a když pak potřebuješ přidat další pole do fragmentu, tak to uděláš jen jednou a všechny dotazy se tím pádem aktualizujou. Z hlediska výkonu by to mělo být efektivní, protože server dostane méně textu ke zpracování.

Pokud upravíš fragment, tak to ovlivní všechny dotazy, co ho používají – automaticky se ti upraví všechno, co ten fragment načítá. Takže jestli potřebuješ třeba přidat pole jako "phone", prostě ho přidáš do fragmentu a máš hotovo ve všech dotazech.

Je to fakt super způsob, jak udržet kód čistý a přehledný.

192 slov
1.9 minut čtení
31. 12. 2024
Libor Hloušek
GraphQL.cz/Články/Použití Fragmentů
Zefektivnění API pomocí fragmentů v GraphQLJak používat fragmenty v GraphQL k optimalizaci dotazů a snížení opakování. Přečtěte si, jak můžete vylepšit výkon svého API s fragmenty a získat lepš...
1000 slov
10 minut čtení
29. 7. 2024
Andrea Malá
Přečíst článek
Podobné otázky