GraphQL.cz/Fórum/Může být GraphQL API a WebSocket server na stejném URL?

Může být GraphQL API a WebSocket server na stejném URL?

Zajímalo by mě, jestli je možné mít GraphQL API a WebSocket server běžící na stejném URL. Představoval jsem si, že bych mohl mít jednu adresu pro všechny své požadavky, což by mohlo usnadnit správu endpointů a zjednodušit připojení na klientské straně. Vím, že GraphQL je skvělý pro dotazy a manipulaci s daty, zatímco WebSocket poskytuje real-time komunikaci, ale nevím, zda je technicky možné oba tyto protokoly zkombinovat na jednom místě. Jak by to vlastně fungovalo? Musel bych nějak rozlišovat mezi typy požadavků, nebo to jde udělat automaticky? A co třeba CORS nebo další bezpečnostní aspekty? Dotýká se to nějak i výkonu nebo latence? Hledal jsem nějaké informace, ale většinou jsem narazil jen na teoretické úvahy a žádné konkrétní příklady. Doufám, že se najde někdo, kdo má s touto kombinací zkušenosti nebo by mohl poskytnout nějaké tipy. Každopádně se mi to zdá jako zajímavý koncept a rád bych věděl, zda to má smysl nebo jestli bych se měl raději držet osvědčených praktik a mít pro každou technologii vlastní URL.

168 slov
1.7 minut čtení
26. 12. 2021
Zdeněk Kadlec

Jasně, můžeš mít GraphQL API a WebSocket server na stejném URL. Tohle se často dělá pomocí různých technik rozlišení požadavků. Například, když server dostane HTTP požadavek, můžeš ho zpracovat jako GraphQL dotaz, zatímco WebSocket spojení můžeš otevřít na stejné adrese a pak komunikovat v reálném čase. Hlavní věc je mít nějaký způsob, jak rozlišit mezi těmito dvěma typy komunikace.

Můžeš to udělat podle typu protokolu – HTTP pro GraphQL a WebSocket pro real-time. Případně bys mohl mít specifickou cestu pro GraphQL jako /graphql a WebSocket připojení na /ws nebo něco podobného. Co se týče CORS, pokud jde o stejnou doménu, tak by to neměl být problém. Bezpečnostní aspekty závisí na tom, jak implementuješ autentizaci a autorizaci.

Pokud jde o výkon, tak záleží na tom, jak moc toho plánuješ provozovat na jednom serveru. Měl bys sledovat, jak se ti to škáluje, ale obecně by to mělo fungovat v pohodě pokud udržuješ věci optimalizované. Takže klidně to zkus a uvidíš, jak to půjde. Vypadá to jako zajímavý projekt!

164 slov
1.6 minut čtení
22. 11. 2024
Bohumil Košťál

No jasně, je to možný! Můžeš mít GraphQL API a WebSocket server na stejném URL, ale chce to trošku chytrost s tím, jak to zpracováváš. Obvykle se to dělá tak, že WebSocket používá upgrade HTTP spojení. To znamená, že první požadavek je klasický HTTP (třeba GET nebo POST pro GraphQL), a když chceš přepnout na WebSocket, tak se udělá upgrade na WebSocket protokol. Takže vlastně na stejný URL můžeš mít oba typy komunikace, akorát musíš mít logiku na serveru, která to umí rozlišit.

Nejčastěji se to dělá tak, že když máš GraphQL dotaz, odešleš ho jako normální HTTP request a když chceš real-time funkci, uděláš WebSocket připojení. Důležitý je dobře ošetřit CORS a autentizaci, aby ti nikdo nelezl do systému zvenku.

Co se týče výkonu a latence – pokud to uděláš dobře, nemělo by to být moc problémové. Ale je dobrý mít na paměti, že čím víc funkcí na jednom místě, tím víc můžeš narazit na komplikace v budoucnu. Takže jo, má to smysl, ale dej pozor na ty detaily.

169 slov
1.7 minut čtení
26. 2. 2024
Olga Ševčíková

Jasně, můžeš mít GraphQL API a WebSocket server na stejném URL. Obvykle se to dělá tak, že používáš HTTP pro GraphQL dotazy a WebSocket pro real-time komunikaci. Často to funguje tak, že při připojení na WebSocket server prostě otevřeš novou komunikaci na stejném endpointu. Můžeš si nastavit, aby server rozlišil mezi požadavky podle protokolu - prostě pokud je to HTTP, zpracovává se to jako GraphQL, a pokud je to WebSocket, jde to jinam. Co se týče CORS, tam bys měl mít na paměti nastavování hlaviček správně pro oba typy spojení. Výkon i latence by neměly být problém, pokud to dobře naprogramuješ a server zvládá obojí. Myslím, že je to fajn způsob, jak to zjednodušit, ale chce to trochu víc práce na backendu.

122 slov
1.2 minut čtení
26. 1. 2024
Vojtěch Košťál
GraphQL.cz/Články/Real-time data s WebSockets
Integrace WebSocket serveru s GraphQL API: Kroky a Best PracticesPodrobný průvodce, jak propojit WebSocket server se stávajícím GraphQL API pro real-time funkce. Přečtěte si o výhodách i implementaci.
1000 slov
10 minut čtení
16. 5. 2020
Lucie Nováková
Přečíst článek
Podobné otázky