REST vs GraphQL: v čem je rozdíl a který použít?
REST a GraphQL jsou dva způsoby návrhu API – dohodnutý způsob, jakým obrazovky vaší aplikace (nebo jiné programy) žádají váš backend o data. U REST existuje samostatné URL pro každý druh věci, například /customers nebo /orders, a každé vrací pevně daný tvar dat. U GraphQL je obvykle jedno URL a volající pošle dotaz, který vypisuje přesně ta pole, která chce dostat zpět. Pro většinu aplikací stavěných s AI je REST jednodušší a lepší výchozí volba.
Proč je to důležité, když stavíte s AI
Když po AI tvůrci požadujete „aplikaci s backendem“, musí vybrat, jak spolu frontend a backend komunikují. Nemusíte o tom rozhodovat pokaždé, ale ty pojmy uvidíte v kódu, v dokumentaci a při připojování externích služeb. Některé služby nabízejí jen jeden styl: spousta služeb vystavuje REST API, zatímco jiné – například Shopify a GitHub – nabízejí také GraphQL, nebo ho upřednostňují. Znalost rozdílu vám pomůže pochopit, na co se díváte, a vyhnout se složitosti, kterou nepotřebujete. Pokud je pro vás „API“ nový pojem, začněte s čím je API.
Běžné přirovnání
REST je pevné menu v restauraci. Každé jídlo (endpoint) přijde tak, jak ho kuchyně navrhla. Objednáte jídlo „zákazník“ a dostanete celý talíř – jméno, e-mail, adresu, datum registrace – i když jste chtěli jen jméno. Chcete i nedávné objednávky zákazníka? To je druhé jídlo.
GraphQL je objednávání à la carte u jednoho číšníka. Napíšete přesně, co chcete: „jméno zákazníka a data a částky jeho posledních tří objednávek“. Jedna objednávka, jeden talíř, jen to, co jste požádali. Kuchyně ale musí být připravena zvládnout jakoukoli kombinaci, kterou si zákazníci napíší.
Stejný požadavek oběma způsoby
Řekněme, že stránka zákazníka potřebuje jméno zákazníka a jeho tři nejnovější objednávky.
S REST to bývají dva požadavky:
GET /api/customers/42
GET /api/customers/42/orders?limit=3
První odpověď může obsahovat víc, než stránka potřebuje:
{ "id": 42, "name": "Lena Park", "email": "lena@example.com", "address": "…", "createdAt": "…" }
S GraphQL je to jeden požadavek, obvykle POST na jediný endpoint, například /graphql, který nese dotaz:
query {
customer(id: 42) {
name
orders(last: 3) {
date
total
}
}
}
A odpověď přesně zrcadlí dotaz:
{
"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 vracejí JSON. Rozdíl je v tom, kdo určuje tvar: u REST rozhoduje server; u GraphQL rozhoduje volající v mezích, které schéma serveru dovoluje.
Srovnání vedle sebe
| REST | GraphQL | |
|---|---|---|
| URL | Mnoho – jedno na zdroj | Obvykle jedno (/graphql) |
| Kdo tvaruje odpověď | Server | Klient, přes dotaz |
| Čtení a zápis | HTTP metody: GET, POST, PATCH, DELETE | Dotazy (čtení) a mutace (zápis) |
| Načítání souvisejících dat | Často několik požadavků | Často jeden požadavek |
| Přebytečná data (dostanete pole, která nepotřebujete) | Běžné | Vyloučeno již návrhem |
| Schéma / typy | Volitelné (např. popis OpenAPI) | Povinné – typované schéma je součástí |
| HTTP cachování (prohlížeče, CDN) | Přímočaré u požadavků GET | Složitější; obvykle řeší klientské knihovny |
| Chyby | HTTP stavové kódy (404, 401, 500) | Často seznam errors v těle odpovědi, často se stavem 200 |
| Zabezpečení a kontrola nákladů | Pravidla pro jednotlivé endpointy | Také limity hloubky a velikosti dotazu |
| Křivka učení a nástroje | Nízká; funguje s jakýmkoli HTTP nástrojem | Vyšší; potřebuje server GraphQL a obvykle klientskou knihovnu |
Kde se který hodí
Zvolte REST, když:
- Stavíte typickou aplikaci: rezervační systém, CRM, dashboard, obchod.
- Jeden frontend mluví s jedním backendem a ovládáte oba.
- Chcete nejjednodušší věc k ladění, ukládání do mezipaměti a zabezpečení.
- Ostatní služby budou volat vaši aplikaci (webhooky a většina integrací očekává endpointy ve stylu REST).
Zvažte GraphQL, když:
- Několik různých klientů – web, mobilní aplikace, partnerské integrace – potřebuje velmi odlišné části stejných dat.
- Vaše data jsou hluboce propojená (produkty, varianty, recenze, prodejci, sklad) a obrazovky je potřebují kombinovat mnoha způsoby.
- Využíváte službu, která nabízí GraphQL jako hlavní API.
Užitečné pravidlo: pokud si nejste jisti, že GraphQL potřebujete, pravděpodobně zatím ne. Přidat ho později je snazší než ho odstranit.
Klíčové pojmy
| Pojem | Význam |
|---|---|
| Endpoint | Konkrétní URL, na které API odpovídá. |
| Zdroj | Druh věci, kterou API spravuje – rezervace, zákazníci. |
| Schéma | Úplný, typovaný popis toho, co může GraphQL API vrátit. |
| Dotaz / mutace | V GraphQL: požadavek na čtení dat / na jejich změnu. |
| Resolver | Serverový kód, který načítá data pro jedno pole GraphQL. |
| Over-fetching / under-fetching | Získání většího množství dat, než potřebujete / potřeba dalších požadavků, abyste dostali dost. |
| Problém N+1 | Když načtení seznamu a detailů pro každou položku spustí jeden databázový dotaz na položku – klasická past výkonu u GraphQL (i REST). |
| OpenAPI | Standardní způsob, jak popsat endpointy a data REST API. |
Časté omyly
- „GraphQL je novější, takže je lepší.“ Řeší konkrétní problémy. Pro jednu aplikaci s jedním frontendem často přidá práci bez velkého přínosu.
- „GraphQL je databáze.“ Není. Je to vrstva API; za ní server stále čte z vaší databáze.
- „GraphQL je vždy rychlejší.“ Méně požadavků může pomoci na pomalých mobilních sítích, ale neomezený dotaz může načíst obrovské množství dat. Výkon závisí na backendu.
- „REST znamená přísný standard.“ V praxi „REST API“ volně značí URL zdrojů plus metody HTTP a JSON. Spousta dobrých API formální pravidla ohýbá.
- „Stav 200 znamená, že to fungovalo.“ U GraphQL kontrolujte pole
errors– požadavek může částečně selhat a přesto vrátit 200.
Na co se zeptat svého AI tvůrce
- „Použij jednoduché REST API s JSON, pokud pro to není jasný důvod. Vysvětli, pokud si myslíš, že je potřeba GraphQL.“
- „Vypiš každý endpoint, co vrací a kdo ho smí volat.“
- „Pro stránku zákazníka vrať jen pole, která stránka používá.“
- „Přidej stránkování k seznamovým endpointům, aby nikdy nevracely tisíce řádků najednou.“
- „Tato služba má jen GraphQL API – volej ji ze serveru, klíč ulož jako tajný údaj a žádej jen pole, která potřebujeme.“
- „Vracej správné HTTP stavové kódy a chybové zprávy v JSONu.“
REST a GraphQL v Mythexu
Dokumentace Mythexu obsahuje návod na stavbu REST API backendu se startovacím promptem a backend může běžet v Node, Pythonu (FastAPI), C# nebo Javě vedle vaší webové aplikace. Dokumentace nepopisuje šablonu GraphQL, takže pokud ji chcete, výslovně o ni požádejte a řekněte proč. Volání GraphQL API třetí strany funguje jako u jakékoli jiné externí služby – viz integrace libovolného API. Související čtení: frontend vs backend a jak postavit REST API.
Otázky
Jaký je hlavní rozdíl mezi REST a GraphQL?
REST API má mnoho URL, jednu pro každý druh zdroje, a každá vrací pevně dané tvary dat. GraphQL API má obvykle jedno URL a klient posílá dotaz, který přesně popisuje, která pole chce, takže jeden požadavek může načíst související data ve tvaru, který obrazovka potřebuje.
Je GraphQL lepší než REST?
Obecně ani jedno není lepší. GraphQL pomáhá, když potřebuje mnoho různých obrazovek nebo aplikací různé části složitých, propojených dat. REST se snáze staví, ukládá do mezipaměti a zabezpečuje a je lepší výchozí volbou pro většinu malých a středních aplikací.
Je GraphQL rychlejší než REST?
Automaticky ne. Může snížit počet požadavků, které obrazovka odešle, ale jediný složitý dotaz může být na serveru pomalý a drahý. Rychlost záleží mnohem víc na tom, jak jsou postaveny backend a databáze, než na stylu API.
Může aplikace používat REST i GraphQL zároveň?
Ano. Mnoho aplikací nabízí GraphQL API pro vlastní frontend, zatímco REST používá pro webhooky a integrace třetích stran, nebo z REST backendu volá GraphQL API jiných firem.