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 REST-a postoji zaseban URL za svaku vrstu stvari, poput /customers ili /orders, i svaki vraća utvrđen oblik podataka. Kod GraphQL-a obično postoji jedan URL, a pozivalac šalje upit koji navodi tačno koja polja želi nazad. Za većinu aplikacija pravljenih uz AI, REST je jednostavniji i bolji podrazumijevani izbor.
Zašto je ovo važno kada gradite uz AI
Kada od AI alata za izgradnju zatražite "aplikaciju s backendom", on mora odlučiti kako će frontend i backend razgovarati. Ne morate to odlučivati svaki put, ali ćete vidjeti te pojmove u kodu, dokumentaciji i prilikom povezivanja s vanjskim servisima. Neki servisi nude samo jedan stil: mnogi servisi izlažu REST API-je, dok drugi, na primjer Shopify i GitHub, nude ili preferiraju i GraphQL. Poznavanje razlike pomaže vam da razumijete šta gledate i izbjegnete dodavanje složenosti koja vam nije potrebna. Ako vam je "API" novo, počnite s šta je API.
Svakodnevna analogija
REST je fiksni meni u restoranu. Svako jelo (endpoint) dolazi onako kako ga je kuhinja osmislila. Naručite jelo "customer" i dobijete cijeli tanjir — ime, email, adresu, datum registracije — čak i ako ste htjeli samo ime. Želite i nedavne narudžbine tog kupca? To je drugo jelo.
GraphQL je naručivanje po izboru od jednog konobara. Zapišete tačno šta želite: "ime kupca i datume i iznose njegove posljednje tri narudžbine". Jedna narudžba, jedan tanjir, samo ono što ste tražili. Ali kuhinja mora biti postavljena da obradi bilo koju kombinaciju koju kupci mogu zapisati.
Isti zahtjev na oba načina
Recimo da stranica kupca treba ime kupca i njegove tri najnovije narudžbine.
S REST-om, to su obično dva zahtjeva:
GET /api/customers/42
GET /api/customers/42/orders?limit=3
Prvi odgovor može sadržati 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
}
}
}
A odgovor tač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 ko odlučuje o obliku: kod REST-a to radi server; kod GraphQL-a to radi pozivalac, u okviru onoga što šema servera dozvoljava.
Uporedni pregled
| REST | GraphQL | |
|---|---|---|
| URL-ovi | Mnogo — po jedan za resurs | Obično jedan (/graphql) |
| Ko oblikuje odgovor | Server | Klijent, preko upita |
| Čitanje i pisanje | HTTP metode: GET, POST, PATCH, DELETE | Upiti (čitanje) i mutacije (pisanje) |
| Dohvatanje povezanih podataka | Često više zahtjeva | Često jedan zahtjev |
| Preveliko dohvatanje (dobijanje polja koja ne trebate) | Uobičajeno | Izbjegnuto po dizajnu |
| Šema / tipovi | Opcionalno (npr. OpenAPI opis) | Obavezno — tipizovana šema je ugrađena |
| HTTP keširanje (pregledači, CDN-ovi) | Jednostavno za GET zahtjeve | Teže; obično rješavaju klijentske biblioteke |
| Greške | HTTP statusni kodovi (404, 401, 500) | Često lista 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; treba GraphQL server i obično klijentsku biblioteku |
Gdje koji odgovara
Odaberite REST kada:
- Gradite tipičnu aplikaciju: sistem za rezervacije, CRM, dashboard, prodavnicu.
- Jedan frontend razgovara s jednim backendom, a vi kontrolišete oba.
- Želite najjednostavniju stvar za debagovanje, keširanje i osiguravanje.
- Druge usluge će pozivati vašu aplikaciju (webhookovi i većina integracija očekuju endpointe u REST stilu).
Razmislite o GraphQL-u kada:
- Nekoliko različitih klijenata — web stranica, mobilna aplikacija, partnerske integracije — treba veoma različite dijelove istih podataka.
- Vaši podaci su duboko povezani (proizvodi, varijante, recenzije, prodavci, zalihe), a ekrani ih moraju kombinovati na mnogo načina.
- Koristite uslugu koja nudi GraphQL kao glavni API.
Korisno pravilo: ako niste sigurni da vam treba GraphQL, vjerovatno ne treba. Lakše ga je dodati kasnije nego ukloniti.
Ključni pojmovi
| Pojam | Značenje |
|---|---|
| Endpoint | Specifičan URL na koji API odgovara. |
| Resurs | Vrsta stvari kojom API upravlja — rezervacije, kupci. |
| Šema | Potpun, tipizovan opis onoga što GraphQL API može vratiti. |
| Upit / mutacija | U GraphQL-u: zahtjev za čitanje podataka / za njihovu izmjenu. |
| Resolver | Serverski kod koji dohvata podatke za jedno GraphQL polje. |
| Preveliko / premalo dohvatanje | Dobijanje više podataka nego što treba / potreba za dodatnim zahtjevima da se dobije dovoljno. |
| N+1 problem | Kada dohvatanje liste i detalja za svaku stavku pokrene jedan upit prema bazi po stavci — klasična zamka performansi za GraphQL (i REST). |
| OpenAPI | Standardan način opisivanja REST endpointa i podataka API-ja. |
Uobičajene zablude
- "GraphQL je noviji, pa je bolji." Rješava određene probleme. Za jednu aplikaciju s jednim frontendom često dodaje posao bez velike koristi.
- "GraphQL je baza podataka." Nije. To je API sloj; iza njega server i dalje čita iz vaše baze.
- "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 zavise od backenda.
- "REST znači strog standard." U praksi "REST API" znači labavo 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 djelimično propasti i ipak vratiti 200.
Šta tražiti od AI alata za izgradnju
- "Koristi jednostavan REST API s JSON-om osim ako postoji jasan razlog da ne — objasni ako misliš da treba GraphQL."
- "Navedi svaki endpoint, šta vraća i ko smije da ga poziva."
- "Za stranicu kupca vrati samo polja koja stranica koristi."
- "Dodaj paginaciju na endpointe s listama da nikada ne vraćaju hiljade redova odjednom."
- "Ovaj servis ima samo GraphQL API — pozovi ga sa servera, čuvaj ključ u tajni i traži samo polja koja su nam potrebna."
- "Vraćaj ispravne HTTP statusne kodove i JSON poruke o greškama."
REST i GraphQL u Mythexu
Mythex-ova dokumentacija uključuje recept za izgradnju REST API backenda sa početnim upitom, a backend može raditi u Node, Python (FastAPI), C# ili Java uz vašu web aplikaciju. Dokumentacija ne opisuje GraphQL šablon, pa ako ga želite, zatražite ga izričito i recite zašto. Pozivanje GraphQL API-ja treće strane radi kao i svaka druga vanjska usluga — pogledajte integriši bilo koji API. Povezano štivo: frontend vs backend i kako napraviti REST API.
Pitanja
Koja je glavna razlika između REST-a i GraphQL-a?
REST API ima mnogo URL-ova, po jedan za svaku vrstu resursa, i svaki vraća fiksni oblik podataka. GraphQL API obično ima jedan URL, a klijent šalje upit koji tačno opisuje koja polja želi, pa jedan zahtjev može dohvatiti povezane podatke u obliku koji ekran treba.
Je li GraphQL bolji od REST-a?
Nijedan nije bolji uopšte. GraphQL pomaže kada mnogo različitih ekrana ili aplikacija treba različite dijelove složenih, povezanih podataka. REST je jednostavniji za izgradnju, keširanje i osiguravanje, i bolji je podrazumijevani izbor za većinu malih i srednjih aplikacija.
Je li GraphQL brži od REST-a?
Ne automatski. Može smanjiti broj zahtjeva koje ekran šalje, ali jedan složen upit može biti spor i skup na serveru. Brzina zavisi mnogo više od toga kako su backend i baza izgrađeni nego od stila API-ja.
Može li aplikacija koristiti i REST i GraphQL?
Da. Mnoge aplikacije izlažu GraphQL API za sopstveni frontend, a REST koriste za webhookove i integracije s trećim stranama, ili iz REST backenda pozivaju GraphQL API-je drugih kompanija.