Průvodci

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

RESTGraphQL
URLMnoho – jedno na zdrojObvykle jedno (/graphql)
Kdo tvaruje odpověďServerKlient, přes dotaz
Čtení a zápisHTTP metody: GET, POST, PATCH, DELETEDotazy (č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 / typyVolitelné (např. popis OpenAPI)Povinné – typované schéma je součástí
HTTP cachování (prohlížeče, CDN)Přímočaré u požadavků GETSložitější; obvykle řeší klientské knihovny
ChybyHTTP 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é endpointyTaké limity hloubky a velikosti dotazu
Křivka učení a nástrojeNízká; funguje s jakýmkoli HTTP nástrojemVyšší; 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

PojemVýznam
EndpointKonkrétní URL, na které API odpovídá.
ZdrojDruh věci, kterou API spravuje – rezervace, zákazníci.
SchémaÚplný, typovaný popis toho, co může GraphQL API vrátit.
Dotaz / mutaceV GraphQL: požadavek na čtení dat / na jejich změnu.
ResolverServerový kód, který načítá data pro jedno pole GraphQL.
Over-fetching / under-fetchingZískání většího množství dat, než potřebujete / potřeba dalších požadavků, abyste dostali dost.
Problém N+1Když 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).
OpenAPIStandardní 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.

Mythex · Pricing · Vytvořte cokoli s AI · Šablony webů a aplikací · Mythex v porovnání · Slovník tvorby aplikací s AI · Bezplatné nástroje pro tvorbu aplikací s AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)