GraphQL
GraphQL vs REST
Összehasonlítás, döntési szempontok és egy valós példa nested adatigényre.
GraphQL vs REST
Mindkét megközelítésnek megvan a maga helye. Az alábbi összehasonlítás segít eldönteni, mikor melyiket érdemes választani.
Összehasonlító táblázat
| Szempont | REST | GraphQL |
|---|---|---|
| Végpontok száma | Sok (erőforrásonként) | Egy (/graphql) |
| Adatigény meghatározása | Szerver dönti el | Kliens dönti el |
| Overfetching | Jellemző | Nem fordul elő |
| Underfetching | Jellemző | Nem fordul elő |
| Típusosság | Opcionális | Beépített, kötelező |
| Dokumentáció | Manuális (OpenAPI) | Automatikus (Introspection) |
| Tanulási görbe | Alacsony | Közepes |
| Caching | HTTP-szintű (egyszerű) | Összetettebb |
| Valós idejű támogatás | Websocket/SSE külön | Subscription beépítve |
| Fájlfeltöltés | Egyszerű | Bonyolultabb |
Mikor válassz REST-et?
- Egyszerű CRUD műveletek, ahol az adatmodell nem változik sokat
- Fájlfeltöltés és bináris adatok kezelése a fő feladat
- A csapat nem ismeri a GraphQL-t, és nincs idő megtanulni
- Nyilvános API, amelyet harmadik felek is fogyasztanak (REST elterjedtebb)
- Egyszerű, kis méretű alkalmazás
Mikor válassz GraphQL-t?
- Komplex frontend, amely sok különböző adatot jelenít meg egy oldalon
- Több kliens (web, mobil, TV-alkalmazás) más-más adatigénnyel
- Gyorsan változó adatmodell
- Valós idejű frissítések kellenek (pl. chat, értesítések)
- Nagy csapat, ahol a frontend és a backend párhuzamosan fejlődik
Egy valódi példa: Twitter-szerű alkalmazás
REST-tel egy tweet-feed betöltéséhez:
GET /feed → lista tweet ID-kkal
GET /tweets/1 → tweet adatok
GET /users/42 → szerző adatok
GET /tweets/1/likes → like-ok számaGraphQL-lel ugyanez egyetlen kérés:
query GetFeed {
feed {
id
content
createdAt
author {
name
handle
avatar
}
likesCount
isLikedByMe
}
}Rövid összefoglaló
- A REST erőforrásonként különálló végpontokat használ, a GraphQL egyet.
- GraphQL esetén a kliens irányítja az adatstruktúrát, REST esetén a szerver.
- REST egyszerűbb kis alkalmazásokhoz, GraphQL hatékonyabb komplex klienseknél.
- Nem kell választani: mikroszolgáltatásos architektúrában REST és GraphQL akár együtt is élhet.