REST vs GraphQL: u čemu je razlika i koji koristiti?
REST i GraphQL su dva načina dizajniranja API-ja, odnosno dogovorenog načina na koji ekrani vaše aplikacije (ili drugi programi) traže podatke od vašeg backenda. Kod RESTa postoji zaseban URL za svaku vrstu stvari, poput /customers ili /orders, i svaki vraća unaprijed određen oblik podataka. Kod GraphQL-a obično postoji jedan URL, a pozivatelj šalje upit koji navodi točno koja polja želi dobiti natrag. Za većinu aplikacija izrađenih uz AI, REST je jednostavniji i bolji zadani izbor.
Zašto je ovo važno kad gradite uz AI
Kad od AI alata za izradu zatražite „aplikaciju s backendom“, mora odlučiti kako frontend i backend međusobno komuniciraju. Ne morate to odlučivati svaki put, ali ćete te pojmove vidjeti u kodu, dokumentaciji i pri povezivanju s vanjskim servisima. Neki servisi nude samo jedan stil: mnogi servisi izlažu REST API-je, dok drugi, primjerice Shopify i GitHub, nude ili preferiraju i GraphQL. Poznavanje razlike pomaže vam razumjeti što gledate i izbjeći dodavanje složenosti koja vam ne treba. Ako su vam „API“ novi pojam, počnite s što je API.
Svakodnevna usporedba
REST je jelovnik sa fiksnim menijem u restoranu. Svako jelo (endpoint) dolazi onako kako ga je kuhinja osmislila. Naručite jelo „customer“ i dobijete cijeli tanjur: ime, email, adresu, datum registracije, čak i ako ste htjeli samo ime. Želite i nedavne narudžbe tog kupca? To je drugo jelo.
GraphQL je naručivanje po narudžbi kod jednog konobara. Zapišete točno što želite: „ime kupca i datume i iznose njegove zadnje tri narudžbe“. Jedna narudžba, jedan tanjur, samo ono što ste tražili. No kuhinja mora biti postavljena da obradi bilo koju kombinaciju koju kupci zapišu.
Isti zahtjev na oba načina
Recimo da stranica kupca treba ime kupca i njegove tri najnovije narudžbe.
S RESTom to su obično dva zahtjeva:
GET /api/customers/42
GET /api/customers/42/orders?limit=3
Prvi odgovor može sadržavati više nego što stranica treba:
{ "id": 42, "name": "Lena Park", "email": "lena@example.com", "address": "…", "createdAt": "…" }
S GraphQL-om to je jedan zahtjev, obično POST na jedan endpoint poput /graphql, koji nosi upit:
query {
customer(id: 42) {
name
orders(last: 3) {
date
total
}
}
}
I odgovor točno odražava upit:
{
"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 }
]
}
}
}
Oba vraćaju JSON. Razlika je u tome tko određuje oblik: kod RESTa to radi poslužitelj; kod GraphQL-a to radi pozivatelj, unutar onoga što shema poslužitelja dopušta.
Usporedba jedan pored drugog
| REST | GraphQL | |
|---|---|---|
| URL-ovi | Mnogo — jedan po resursu | Obično jedan (/graphql) |
| Tko oblikuje odgovor | Poslužitelj | Klijent, putem upita |
| Čitanje i pisanje | HTTP metode: GET, POST, PATCH, DELETE | Upiti (čitanje) i mutacije (pisanje) |
| Dohvaćanje povezanih podataka | Često nekoliko zahtjeva | Često jedan zahtjev |
| Prekomjerno dohvaćanje (dobivanje polja koja ne trebate) | Često | Izbjegnuto po dizajnu |
| Shema / tipovi | Opcionalno (npr. OpenAPI opis) | Obavezno — tipizirana shema je ugrađena |
| HTTP predmemoriranje (preglednici, CDN-ovi) | Jednostavno za GET zahtjeve | Teže; obično rješavaju klijentske biblioteke |
| Greške | HTTP statusni kodovi (404, 401, 500) | Često popis errors u tijelu odgovora, često uz status 200 |
| Sigurnost i kontrola troškova | Pravila po endpointu | Potrebna su i ograničenja dubine i veličine upita |
| Krivulja učenja i alati | Niska; radi s bilo kojim HTTP alatom | Viša; potreban je GraphQL poslužitelj i obično klijentska biblioteka |
Gdje koji odgovara
Odaberite REST kad:
- Gradite tipičnu aplikaciju: sustav rezervacija, CRM, nadzornu ploču, trgovinu.
- Jedan frontend komunicira s jednim backendom i vi kontrolirate oba.
- Želite najjednostavniju stvar za otklanjanje grešaka, predmemoriranje i osiguravanje.
- Druge usluge će pozivati vašu aplikaciju (webhookovi i većina integracija očekuju endpointe u stilu RESTa).
Razmislite o GraphQL-u kad:
- Nekoliko različitih klijenata — web stranica, mobilna aplikacija, partnerske integracije — treba vrlo različite dijelove istih podataka.
- Vaši podaci su duboko povezani (proizvodi, varijante, recenzije, prodavači, zalihe) i ekrani ih moraju kombinirati na mnogo načina.
- Koristite uslugu koja GraphQL nudi kao svoj glavni API.
Korisno pravilo: ako niste sigurni trebate li GraphQL, vjerojatno ne trebate još. Lakše ga je dodati kasnije nego ukloniti.
Ključni pojmovi
| Pojam | Značenje |
|---|---|
| Endpoint | Određeni URL na koji API odgovara. |
| Resurs | Vrsta stvari kojom API upravlja — rezervacije, kupci. |
| Shema | Potpun, tipiziran opis onoga što GraphQL API može vratiti. |
| Upit / mutacija | U GraphQL-u: zahtjev za čitanje podataka / za njihovu promjenu. |
| Resolver | Kod na poslužitelju koji dohvaća podatke za jedno GraphQL polje. |
| Prekomjerno / nedovoljno dohvaćanje | Dohvaćanje više podataka nego što trebate / potreba za dodatnim zahtjevima da dobijete dovoljno. |
| Problem N+1 | Kad dohvaćanje popisa plus detalja za svaku stavku pokrene jedan upit prema bazi po stavci — klasična zamka performansi u GraphQL-u (i REST-u). |
| OpenAPI | Standardni način opisivanja endpointa i podataka REST API-ja. |
Česte zablude
- „GraphQL je noviji, pa je bolji.“ Rješava određene probleme. Za jednu aplikaciju s jednim frontendom često dodaje posao bez veće koristi.
- „GraphQL je baza podataka.“ Nije. To je API sloj; iza njega poslužitelj i dalje čita iz vaše baze podataka.
- „GraphQL je uvijek brži.“ Manje zahtjeva može pomoći na sporim mobilnim mrežama, ali neograničen upit može učitati ogromne količine podataka. Performanse ovise o backendu.
- „REST znači strogi standard.“ U praksi „REST API“ labavo znači URL-ove resursa plus HTTP metode i JSON. Mnogi dobri API-ji savijaju formalna pravila.
- „Status 200 znači da je uspjelo.“ Kod GraphQL-a provjerite polje
errors: zahtjev može djelomično ne uspjeti i ipak vratiti 200.
Što pitati vaš AI alat za izradu
- „Koristi jednostavan REST API s JSON-om osim ako postoji jasan razlog da ne. Objasni ako misliš da je GraphQL potreban.“
- „Navedi svaki endpoint, što vraća i tko smije pozvati.“
- „Za stranicu kupca vrati samo polja koja stranica koristi.“
- „Dodaj paginaciju na endpointe s popisima da nikad ne vrate tisuće redaka odjednom.“
- „Ovaj servis ima samo GraphQL API — pozovi ga s poslužitelja, drži ključ u tajnoj vrijednosti i traži samo polja koja trebamo.“
- „Vraćaj ispravne HTTP statusne kodove i JSON poruke o greškama.“
REST i GraphQL u Mythexu
Mythexova dokumentacija uključuje recept za izradu REST API backenda s početnim upitom, a backend može raditi u Node.js-u, Pythonu (FastAPI), C#-u ili Javi uz vašu web aplikaciju. Dokumentacija ne opisuje GraphQL predložak, pa ako ga želite, zatražite ga izričito i recite zašto. Poziv na GraphQL API treće strane radi kao i svaka druga vanjska usluga; vidi integrirajte bilo koji API. Srodno štivo: frontend vs backend i kako izraditi REST API.
Pitanja
Koja je glavna razlika između REST-a i GraphQL-a?
REST API ima mnogo URL-ova, jedan po vrsti resursa, i svaki vraća fiksni oblik podataka. GraphQL API obično ima jedan URL, a klijent šalje upit koji točno opisuje koja polja želi, pa jedan zahtjev može dohvatiti povezane podatke u obliku koji treba određenom ekranu.
Je li GraphQL bolji od RESTA?
Općenito nijedan nije bolji. GraphQL pomaže kad mnogo različitih ekrana ili aplikacija treba različite dijelove složenih, povezanih podataka. REST je jednostavniji za izradu, predmemoriranje i osiguravanje te je bolji zadani izbor za većinu malih i srednjih aplikacija.
Je li GraphQL brži od RESTA?
Ne automatski. Može smanjiti broj zahtjeva koje ekran šalje, ali jedan složen upit može biti spor i skup na poslužitelju. Brzina ovisi mnogo više o tome kako su izgrađeni backend i baza podataka nego o stilu API-ja.
Može li aplikacija koristiti i REST i GraphQL?
Da. Mnoge aplikacije izlažu GraphQL API za vlastiti frontend, a REST koriste za webhookove i integracije s trećim stranama, ili REST backend poziva tuđe GraphQL API-je.