REST vs GraphQL: mi a különbség, és melyiket használd?
A REST és a GraphQL az API tervezésének két módja: az egyeztetett módja annak, ahogy az app képernyői (vagy más programok) adatot kérnek a backendtől. A REST esetén minden típushoz külön URL tartozik, például /customers vagy /orders, és mindegyik rögzített adatszerkezetet ad vissza. A GraphQL esetén általában egy URL van, a hívó pedig lekérdezést küld, amely pontosan megadja, mely mezőket szeretné visszakapni. AI-val épített appok többségénél a REST az egyszerűbb és jobb alapértelmezés.
Miért számít ez AI-val való építésnél
Amikor egy AI-építőtől „backenddel rendelkező appot” kérsz, el kell döntenie, hogyan kommunikál a frontend a backenddel. Ezt nem neked kell minden alkalommal eldöntened, de a kifejezésekkel találkozni fogsz a kódban, a dokumentációban és külső szolgáltatások csatlakoztatásakor. Vannak szolgáltatások, amelyek csak egyféle stílust kínálnak: sok szolgáltatás REST API-t tesz elérhetővé, mások, például a Shopify és a GitHub, a GraphQL-t is kínálják, vagy azt részesítik előnyben. A különbség ismerete segít megérteni, amit látsz, és elkerülni a fölösleges bonyolultságot. Ha az „API” fogalma új neked, kezdd azzal, mi az API.
Mindennapi hasonlat
A REST egy étterem fix menüje. Minden étel (végpont) úgy érkezik, ahogy a konyha összeállította. Rendeled az „ügyfél” tételt, és megkapod az egész tányért: nevet, e-mailt, címet, regisztrációs dátumot, akkor is, ha csak a nevet akartad. Az ügyfél legutóbbi rendeléseit is kéred? Az egy második tétel.
A GraphQL egy pincértől rendelt à la carte étlap. Leírod pontosan, mit szeretnél: „az ügyfél neve, és az utolsó három rendelésének dátuma és összege”. Egy rendelés, egy tányér, csak azt, amit kértél. Ehhez azonban a konyhát fel kell készíteni arra, hogy bármilyen kombinációt kezeljen, amit a vendégek leírhatnak.
Ugyanaz a kérés, mindkét módon
Tegyük fel, hogy egy ügyféloldalnak egy ügyfél nevére és a legutóbbi három rendelésére van szüksége.
REST-tel ez jellemzően két kérés:
GET /api/customers/42
GET /api/customers/42/orders?limit=3
Az első válasz többet tartalmazhat, mint amennyire az oldalnak szüksége van:
{ "id": 42, "name": "Lena Park", "email": "lena@example.com", "address": "…", "createdAt": "…" }
GraphQL-lel egyetlen kérés van, általában POST egyetlen végpontra, például /graphql, amely lekérdezést visz:
query {
customer(id: 42) {
name
orders(last: 3) {
date
total
}
}
}
A válasz pontosan tükrözi a lekérdezést:
{
"data": {
"customer": {
"name": "Lena Park",
"orders": [
{ "date": "2026-09-20", "total": 48.0 },
{ "date": "2026-09-02", "total": 19.5 },
{ "date": "2026-08-15", "total": 72.25 }
]
}
}
}
Mindkettő JSON formátumot ad vissza. A különbség abban van, ki dönti el a szerkezetet: REST-nél a szerver, GraphQL-nél a hívó, a szerver sémája által megengedett keretek között.
Egymás melletti összehasonlítás
| REST | GraphQL | |
|---|---|---|
| URL-ek | Sok, erőforrásonként egy | Általában egy (/graphql) |
| Ki alakítja a választ | A szerver | A kliens, a lekérdezésen keresztül |
| Olvasás és írás | HTTP-metódusok: GET, POST, PATCH, DELETE | Lekérdezések (olvasás) és mutációk (írás) |
| Kapcsolódó adatok lekérése | Gyakran több kérés | Gyakran egy kérés |
| Túllekérdezés (nem kellő mezők lekérése) | Gyakori | Tervezésből adódóan elkerülhető |
| Séma / típusok | Opcionális (pl. OpenAPI-leírás) | Kötelező: beépített típusos séma |
| HTTP-gyorsítótárazás (böngészők, CDN-ek) | Egyszerű GET kéréseknél | Nehezebb; általában klienskönyvtárak kezelik |
| Hibák | HTTP-státuszkódok (404, 401, 500) | Gyakran egy errors lista a válasz törzsében, gyakran 200 státusszal együtt |
| Biztonság és költségkontroll | Végpontonkénti szabályok | Szükség van a lekérdezés mélységének és méretének korlátozására is |
| Tanulási görbe és eszközök | Alacsony; bármely HTTP-eszközzel működik | Magasabb; GraphQL-szervert és általában klienskönyvtárat igényel |
Hol melyik illik
Válaszd a RESTet, ha:
- tipikus appot építesz: foglalási rendszert, CRM-et, irányítópultot, webshopot.
- egy frontend egy backenddel beszél, és mindkettőt te irányítod.
- a lehető legegyszerűbben szeretnél hibakeresni, gyorsítótárazni és biztosítani.
- más szolgáltatások hívják majd az appodat (a webhookok és a legtöbb integráció REST-stílusú végpontokat vár).
Fontold meg a GraphQL-t, ha:
- több különböző kliens — weboldal, mobilapp, partneri integrációk — nagyon eltérő szeleteket igényel ugyanabból az adatból.
- az adataid mélyen összekapcsoltak (termékek, variánsok, értékelések, eladók, készlet), és a képernyőknek sokféleképpen kell kombinálniuk őket.
- olyan szolgáltatást használsz, amely a GraphQL-t kínálja fő API-jaként.
Hasznos szabály: ha nem vagy biztos benne, hogy szükséged van GraphQL-re, valószínűleg még nincs. Később könnyebb hozzáadni, mint eltávolítani.
Kulcsfogalmak
| Fogalom | Jelentés |
|---|---|
| Végpont | Egy konkrét URL, amelyre az API válaszol. |
| Erőforrás | Egy típusú dolog, amit az API kezel — foglalások, ügyfelek. |
| Séma | A GraphQL API által visszaadható dolgok teljes, típusos leírása. |
| Lekérdezés / mutáció | GraphQL-ben: kérés adat olvasására / módosítására. |
| Resolver | Az a szerverkód, amely egy GraphQL-mező adatát lekéri. |
| Túl- / alullekérdezés | Több adat lekérése, mint amennyi kell / további kérések szükségessége, hogy elég adat legyen. |
| N+1 probléma | Amikor egy lista és az elemek részletei elemenként külön adatbázis-lekérdezést indítanak — klasszikus teljesítménycsapda GraphQL-ben (és REST-ben is). |
| OpenAPI | Szabványos módja egy REST API végpontjainak és adatainak leírásának. |
Gyakori tévhitek
- „A GraphQL újabb, tehát jobb.” Konkrét problémákat old meg. Egy egyetlen frontendes appnál gyakran plusz munkát ad, kevés haszonnal.
- „A GraphQL egy adatbázis.” Nem az. API-réteg; mögötte a szerver továbbra is az adatbázisodból olvas.
- „A GraphQL mindig gyorsabb.” Kevesebb kérés segíthet lassú mobilhálózaton, de egy korlátlan lekérdezés hatalmas mennyiségű adatot tölthet be. A teljesítmény a backendtől függ.
- „A REST szigorú szabványt jelent.” A gyakorlatban a „REST API” lazán azt jelenti: erőforrás-URL-ek, HTTP-metódusok és JSON. Sok jó API hajlítja a formális szabályokat.
- „A 200-as státusz azt jelenti, hogy működött.” GraphQL-nél ellenőrizd az
errorsmezőt — egy kérés részben meghiúsulhat, és mégis 200-zal térhet vissza.
Mit kérdezz az AI-építődtől
- „Használj egyszerű REST API-t JSON-nel, hacsak nincs egyértelmű ok az ellenkezőre — magyarázd el, ha szerinted GraphQL kell.”
- „Sorold fel minden végpontot, mit ad vissza, és ki hívhatja.”
- „Az ügyfél-oldalhoz csak azokat a mezőket add vissza, amelyeket az oldal használ.”
- „Adj lapozást a listavégpontokhoz, hogy soha ne adjanak vissza egyszerre több ezer sort.”
- „Ez a szolgáltatás csak GraphQL API-t kínál — szerverről hívd, a kulcsot tartsd titokban, és csak a szükséges mezőket kérd le.”
- „Adj megfelelő HTTP-státuszkódokat és JSON-hibaüzeneteket.”
REST és GraphQL a Mythexben
A Mythex dokumentációja tartalmaz egy receptet a REST API backend építéséhez kezdő prompttal, a backend pedig futhat Node-ban, Pythonban (FastAPI), C#-ban vagy Javában a webappod mellett. A dokumentáció nem ír le GraphQL-sablont, ezért ha szeretnél egyet, kérd kifejezetten, és indokold meg. Harmadik féltől származó GraphQL API hívása ugyanúgy működik, mint bármely más külső szolgáltatásé — lásd: integrálj bármilyen API-t. Kapcsolódó olvasmány: frontend vs backend és hogyan építs REST API-t.
Kérdések
Mi a fő különbség a REST és a GraphQL között?
A REST API sok URL-t használ, típusonként egyet, és mindegyik rögzített adatszerkezetet ad vissza. A GraphQL API általában egyetlen URL-t használ, a kliens pedig lekérdezést küld, amely pontosan megadja, mely mezőkre van szüksége, így egy kérés is lekérheti a kapcsolódó adatokat a képernyő által igényelt formában.
A GraphQL jobb, mint a REST?
Általánosságban egyik sem jobb. A GraphQL akkor segít, ha sok különböző képernyőnek vagy appnak eltérő szeletekre van szüksége komplex, összekapcsolt adatokból. A REST egyszerűbben építhető, gyorsítótárazható és biztosítható, és a legtöbb kis- és közepes appnál jobb alapértelmezés.
A GraphQL gyorsabb, mint a REST?
Nem automatikusan. Csökkentheti a képernyő által indított kérések számát, de egyetlen összetett lekérdezés lassú és drága lehet a szerveren. A sebesség sokkal inkább attól függ, hogyan épül fel a backend és az adatbázis, mint az API stílusától.
Használhat egy app egyszerre REST-et és GraphQL-t?
Igen. Sok app GraphQL API-t tesz elérhetővé a saját frontendjének, miközben REST-et használ webhookokhoz és harmadik féltől származó integrációkhoz, vagy REST backendről hív más cégek GraphQL API-jait.