GraphQL.cz/Fórum/Co je under-fetching a jak to řešit v GraphQL?

Co je under-fetching a jak to řešit v GraphQL?

Zajímalo by mě, co přesně znamená termín under-fetching v kontextu GraphQL. Slyšel jsem, že je to problém, který může nastat během dotazování na API, ale nejsem si jistý, jak se to projevuje v praxi. Jaké situace mohou vést k tomu, že se mi nedostane všech potřebných dat v jednom dotazu? Mám pocit, že se potýkám s tímto problémem ve svých projektech, kdy musím posílat více dotazů za sebou, abych získal všechny potřebné informace. Je nějaký způsob, jak tomu předejít nebo to vyřešit? Možná existují nějaké best practices nebo konkrétní techniky v GraphQL, které by mi mohly pomoci optimalizovat mé dotazy a získat všechna data najednou bez zbytečného zatěžování serveru? A co třeba fragmenty nebo jiné mechanismy, které by mohly usnadnit práci s daty? Byl bych rád, kdyby mi někdo mohl poskytnout nějaké příklady nebo vysvětlit, jak správně strukturálně navrhnout své GraphQL API, aby se under-fetching minimalizoval. Děkuji!

147 slov
1.5 minut čtení
29. 9. 2020
František Hůlka

Under-fetching je v podstatě situace, kdy dotaz na GraphQL API vrátí méně dat, než potřebuješ. To se děje, když tvá aplikace chce získat nějaké informace, ale dotaz, který pošleš, je příliš obecný nebo nekompletní. Například, pokud chceš uživatelský profil a jeho příspěvky, ale dotaz vrátí jen základní info o uživateli bez příspěvků, musíš udělat další dotaz, což je otravné a může to zvýšit latenci.

Jak to řešit? Nejdůležitější je dobře navrhnout strukturu API a zamyslet se nad tím, co všechno potřebuješ. Můžeš použít fragmenty pro opakující se části JSON odpovědi a tím si ujasnit, co vlastně chceš z různých typů dotazů. Místo posílání více dotazů můžeš zkombinovat více polí do jednoho dotazu tím, že si vytvoříš složené typy nebo použiješ aliasy pro vyžádání různých dat najednou.

Taky pomůže použití „dataloaderu“, což ti umožní batchovat požadavky a optimalizovat načítání dat. Takže místo toho, abys volal API pro každého uživatele zvlášť, můžeš jich načíst víc najednou.

Celkově jde o to mít dobrou představu o tom, jaká data potřebuje tvá aplikace a strukturovat dotazy tak, aby ses vyhnul zbytečným voláním. Zkus si projít dokumentaci k GraphQL a kouknout se na nejlepší praktiky – to by ti mělo dost pomoct.

193 slov
1.9 minut čtení
27. 1. 2024
Ladislav Šilhavý

Under-fetching v GraphQL je, když dotaz, který posíláš na server, nevrací všechny potřebné informace. To se může stát, když třeba potřebuješ data z různých částí schématu, ale nezahrneš všechno do jednoho dotazu, takže pak musíš posílat další dotazy, abys získal to, co ti chybí. Tohle může být dost frustrující a zbytečně to zatěžuje server i klienta.

Aby ses tomu vyhnul, můžeš využít fragmenty. Ty ti umožní definovat části dotazů, které můžeš znovu používat, což ti pomůže zajistit, že dostaneš všechna potřebná pole bez psaní opakujících se kódů. Dále se neboj experimentovat s vícero úrovněmi dotazů, pokud tvé API podporuje nested queries. Tím pádem můžeš získat kompletní data v jednom zavolání.

Další tip je dobře navrhnout své schéma. Měl bys mít jasně definované typy a vztahy mezi nimi. Tím pádem když uděláš dotaz na nějaký typ, můžeš snadno přidat další související informace. Zkrátka se snaž mít co nejvíc informací ve správně strukturovaném dotazu na začátku a podívej se na optimalizaci svých resolvers. To by mělo podle mě pomoct minimalizovat under-fetching.

167 slov
1.7 minut čtení
9. 9. 2023
Andrea Sládková

Under-fetching v GraphQL se stává, když dotaz, který posíláš, nevrátí všechna potřebná data v jednom požadavku, takže musíš udělat další dotazy. Například, když načítáš uživatele a potřebuješ i jeho příspěvky, ale v jednom dotazu dostaneš jen základní info o uživatelském profilu. Tím pádem musíš udělat další dotaz pro příspěvky, což může být nepohodlné a neefektivní.

Aby ses vyhnul under-fetching, můžeš zkusit několik věcí. První je dobře promyslet strukturu svých dotazů a přemýšlet nad tím, co všechno potřebuješ. Můžeš také využít fragmenty, což ti umožní opakovaně používat části dotazu a ušetří to čas a zbytečné požadavky. Další možností je použít dotazy s více úrovněmi, kdy si můžeš načíst data včetně souvisejících objektů najednou.

Důležité je také optimalizovat API na serverové straně – zamysli se nad tím, jaké vztahy mezi daty máš a jestli bys nemohl zpřístupnit všechna potřebná data v jednom dotazu místo vícero menších. Když se ti podaří dobře navrhnout schéma a strukturu typu, měl bys mít výrazně méně problémů s under-fetchingem.

161 slov
1.6 minut čtení
1. 11. 2021
Štěpán Řezník
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.
1000 slov
10 minut čtení
15. 2. 2020
Martin Černý
Přečíst článek
Podobné otázky