GraphQL.cz/Fórum/Příklad hromadění v GraphQL

Příklad hromadění v GraphQL

Zajímalo by mě, jak se vlastně dělá hromadění dat v GraphQL. Mám nějaké zkušenosti s REST API, ale když přejdu na GraphQL, tak se v tom trochu ztrácím. Mohl by mi někdo ukázat příklad, jak správně udělat hromadné načítání dat třeba z databáze? Myslím tím něco, co by využilo dotazy pro vícero položek najednou. Třeba bych chtěl získat data o uživatelích a jejich příspěvcích najednou, ale nevím, jak to správně napsat. Jak se to dělá efektivně? Jaké jsou nejlepší praktiky, aby se to nedělalo na více dotazech? A jak pracovat s paginací nebo filtrováním při hromadném načítání? Bude to složité, nebo se to dá zvládnout i pro začátečníka? Hlavně bych chtěl vidět jasný příklad, abych si to mohl lépe představit. Děkuju moc!

122 slov
1.2 minut čtení
21. 5. 2024
Jaroslava Pospíšilová
Jaroslava Pospíšilová

Hromadění dat v GraphQL je docela jiné než v REST, ale dá se to zvládnout. Když chceš načíst data o uživatelích a jejich příspěvcích, uděláš to pomocí jediné dotazu, což je super. Můžeš si napsat dotaz, kde specifikuješ, co všechno chceš dostat. Třeba něco jako:

query \{
  users \{
    id
    name
    posts \{
      id
      title
      content
    \}
  \}
\}

Tímhle způsobem dostaneš všechny uživatele včetně jejich příspěvků v jednom dotazu, což šetří čas a zátěž serveru.

Pokud jde o paginaci nebo filtrování, tak to se dělá většinou přes argumenty v dotazu. Můžeš přidat například limit a offset, aby ses dostal k určitému počtu uživatelů nebo příspěvků. Něco jako:

query \{
  users(limit: 10, offset: 0) \{
    id
    name
    posts \{
      id
      title
    \}
  \}
\}

Tímhle způsobem můžeš snadno řídit, kolik dat načteš najednou. Většina knihoven pro GraphQL už má podporu pro paginaci a filtrování, takže tohle bys měl mít pokryté.

Zpočátku to může vypadat složitě, ale jak si na to zvykneš, zjistíš, že je to moc efektivní způsob práce s daty. Takže klidně zkus a uvidíš!

221 slov
2.2 minut čtení
11. 1. 2025
Simona Světlíková
Simona Světlíková

Takže hromadění v GraphQL je v podstatě o tom, že můžeš udělat jeden dotaz, který ti vrátí všechna potřebná data najednou, místo abys musel posílat vícero dotazů jak u RESTu. Představ si, že chceš získat uživatele a jejich příspěvky. Místo aby ses ptal na uživatele a pak na příspěvky zvlášť, můžeš to udělat takhle:

Máš nějaký typ jako User s polem posts, které vrací všechny příspěvky daného uživatele. Dotaz pak může vypadat třeba takto:

query \{
  users \{
    id
    name
    posts \{
      id
      title
      content
    \}
  \}
\}

Tímto způsobem dostaneš seznam uživatelů a pro každého jeho příspěvky v jednom dotazu. Co se týče paginace, GraphQL obvykle používá offset nebo cursor-based paginaci. Vypadá to třeba takto:

query \{
  users(first: 10) \{
    edges \{
      node \{
        id
        name
        posts(first: 5) \{
          edges \{
            node \{
              id
              title
            \}
          \}
        \}
      \}
    \}
  \}
\}

Tohle ti vrátí prvních deset uživatelů a pro každého pět příspěvků. Filtrování můžeš udělat jednoduše přidáním argumentů do dotazu – například přidat where nebo filter argumenty podle potřeby.

Není to složitý, stačí se nad tím zamyslet a postupně si to osahat. Když přijdeš na ty základy, tak ti to půjde rychle. Takže hurá do toho!

331 slov
3.3 minut čtení
8. 2. 2025
Blanka Hlaváčová
Blanka Hlaváčová

Hromadění dat v GraphQL se dělá fakt jednoduše a je to jedna z hlavních výhod, co tohle API má. Místo aby jsi musel posílat vícero dotazů, můžeš si vytvořit jeden dotaz, který ti vrátí všechno potřebný najednou. Například když chceš získat uživatele a jejich příspěvky, můžeš napsat něco takovýho:

query \{
  users \{
    id
    name
    posts \{
      id
      title
      content
    \}
  \}
\}

Tímhle dotazem si řekneš o všechny uživatele a k nim rovnou i všechny jejich příspěvky. Všechno to dostaneš v jednom odpovědi. Co se paginace týče, můžeš použít argumenty jako limit a offset, nebo nějaký cursor-based pagination. Takže třeba:

query \{
  users(limit: 10, offset: 0) \{
    id
    name
    posts(limit: 5) \{
      id
      title
    \}
  \}
\}

Jo a pro filtrování můžeš přidat parametry do dotazu. Například pokud chceš jen uživatele s určitým ID, tak něco jako:

query \{
  user(id: "123") \{
    id
    name
    posts \{
      id
      title
    \}
  \}
\}

Takže shrnutí – klidně si to naplánuj tak, aby jsi měl jedno hromadné načítání dat s možností paginace a filtrování. Je to sice trochu jiný styl než REST, ale dá se to pochopit i pro začátečníka. Hlavně se neboj experimentovat a testovat různé dotazy v GraphQL Playgroundu!

267 slov
2.7 minut čtení
4. 2. 2025
Zdeněk Burian
Zdeněk Burian
Podobné otázky