GraphQL.cz/Fórum/Jak fungují subscription v GraphQL?

Jak fungují subscription v GraphQL?

Nedávno jsem se začal zajímat o GraphQL a narazil jsem na pojem "subscription", ale moc mi to není jasné. Mohl by mi někdo vysvětlit, co to vlastně je a jak to funguje? Chápu, že je to nějaký způsob, jak sledovat změny v datech, ale jak to probíhá v praxi? Jak se liší od dotazů a mutací? Co všechno potřebuji k tomu, abych mohl implementovat subscription ve své aplikaci? Hlavně mi není jasné, jak to vlastně funguje na úrovni serveru a klienta. Jakým způsobem se klient připojuje k serveru pro tyhle subscription? Mám pocit, že tam hraje roli WebSocket nebo něco podobného, ale nejsem si tím jistý. Jak moc je to složité implementovat a co všechno bych měl mít na paměti při práci s tímto konceptem? Je na to nějaký konkrétní příklad, který by ukázal, jak to celé funguje? Děkuju všem za pomoc!

142 slov
1.4 minut čtení
14. 3. 2023
Jan Šafařík

Takže subscription v GraphQL je v podstatě způsob, jak dostávat real-time aktualizace od serveru. Na rozdíl od dotazů (které si prostě pošleš a čekáš na odpověď) a mutací (kde měníš data), subscription ti umožňují poslouchat na změny. Když se změní nějaká data, server to pošle všem klientům, kteří mají danou subscription otevřenou.

V praxi to často funguje přes WebSockety. To znamená, že se klient připojí k serveru pomocí WebSocketového spojení a pak může posílat subscription dotazy. Jakmile dojde ke změně dat, server automaticky „zapne“ posílání zpráv (eventů) zpět na klienta. Takže ty nemusíš neustále refreshovat nebo znovu dotazovat server.

Implementace může být trochu tricky, záleží na tom, jaký server a knihovnu používáš. Např. Apollo Server má docela dobrou podporu pro subscriptions a je to fajn začít s tím. Na klientské straně potřebuješ i nějakou knihovnu, která zvládne WebSockety, třeba Apollo Client nebo jiný řešení.

Důležitý je mít na paměti, že když se připojuješ k serveru, musíš mít správně nastavený endpoint pro WebSockety, jinak se nepřipojíš. Pak už jen čekáš na zprávy a zpracováváš je podle potřeby.

Pokud jde o příklad – dejme tomu, že máš chatovou aplikaci. Když někdo pošle zprávu, můžeš mít subscription, která poslouchá na nové zprávy a automaticky ti je zobrazí v reálném čase bez nutnosti obnovovat stránku.

207 slov
2.1 minut čtení
16. 12. 2023
Ivana Bečková

Subscription v GraphQL je vlastně způsob, jak můžeš dostávat real-time aktualizace z serveru. To znamená, že když se na serveru něco změní, tak ti to hned pošle zpátky. Na rozdíl od dotazů (queries), které ti vrátí data na vyžádání, a mutací (mutations), které slouží k úpravám dat, subscription tě udržuje v obraze s tím, co se děje.

Na úrovni serveru potřebuješ implementovat logiku, která poslouchá na události a pak posílá zprávy klientům, kteří se přihlásili k odběru. Klienti se obvykle připojují přes WebSockety, což je protokol pro obousměrnou komunikaci. Takže můžeš mít třeba frontend v Reactu nebo jiném frameworku a použít knihovny jako Apollo Client nebo Relay, které ti to usnadní.

Při implementaci bys měl mít na paměti správné spravování připojení a zabezpečení komunikace. V praxi to vypadá tak, že když klient pošle subscription požadavek, server ho zaregistruje a pak při každé změně dat (např. nová zpráva v chatu) pošle aktualizaci všem přihlášeným klientům.

Například, pokud máš chatovací aplikaci, můžeš mít subscription na nové zprávy. Když někdo pošle zprávu, server to zachytí a pošle zprávu všem klientům najednou. Je to moc užitečné pro aplikace, kde chceš mít aktuální informace bez nutnosti neustále refreshovat stránku.

192 slov
1.9 minut čtení
11. 10. 2024
Matěj Ševčík

Takže, subscriptions v GraphQL jsou vlastně způsob, jak dostávat real-time aktualizace z serveru. To znamená, že když se něco změní na serveru (třeba někdo přidá nový komentář nebo upraví data), server to může poslat všem klientům, kteří se na to "přihlásili", a ti hned vidí změnu bez nutnosti obnovovat stránku nebo znovu dotazovat.

Na rozdíl od běžných dotazů (queries), které jen posílají požadavek a čekají na odpověď, nebo mutací (mutations), které mění data, subscriptions udržují otevřené spojení mezi klientem a serverem. To se většinou dělá přes WebSockety, což je protokol, který umožňuje obousměrnou komunikaci.

Prakticky to vypadá tak, že klient se připojí k serveru pomocí WebSocketu a pošle žádost o subscription. Server pak začne posílat data zpět, kdykoliv dojde k nějaké události, která se týká toho, co klient sleduje. Je to fajn pro chat aplikace nebo notifikace.

Implementace není zas tak složitá, ale chce to mít na paměti pár věcí: musíš mít správně nastavený server, který umí pracovat s WebSockety a subscription schema v GraphQL. Na klientovi pak potřebuješ knihovnu, která umí tyhle subscription zpracovávat – oblíbený je Apollo Client nebo Relay.

Jako příklad si představ chat aplikaci, kde každý uživatel má open subscription na nové zprávy – jakmile někdo pošle zprávu, server ji pushne všem uživatelům, kteří jsou online. Takže ty hned vidíš novou zprávu bez jakéhokoliv refreshování.

217 slov
2.2 minut čtení
26. 5. 2023
Kristýna Zajícová
GraphQL.cz/Články/Mobilní aplikace a GraphQL
Výhody použití GraphQL pro real-time funkce v mobilních aplikacíchProzkoumejte, jak GraphQL umožňuje flexibilní a efektivní implementaci real-time funkcionalit v mobilních aplikacích.
1000 slov
10 minut čtení
5. 11. 2021
Tereza Horáková
Přečíst článek
Podobné otázky