GraphQL vs. REST | robot_dreams Czech
should_authorize_via_email
email.input_code tel.input_code
 
email.code_actual_for tel.code_actual_for
apply_exit_text
session_ended
to_homepage
GraphQL vs. REST:

GraphQL vs. REST:

Jaké API bude nejlepší pro návrh architektury tvého projektu?

Přemýšlíš o tom, který z technologických balíčků bude tím nejlepším řešením pro tvůj příští projekt? Výběr může být obtížný z mnoha důvodů. Jaké tedy bude nejlepší návrhové rozhraní API? Na výběr máš hned ze čtyř možností: SOAP, GRPC, REST a GraphQL, avšak ve vývojářské komunitě se nejčastěji zvažují dvě možnosti – známější REST API a novější GraphQL.

Tyto dva nástroje pro budování rozhraní API jsou zcela odlišné. V praxi fungují tak, že odešlou požadavek HTTP a obdrží výsledek. Obě varianty mají své klady i zápory, na základě nichž si můžeš vybrat. V článku ti je podrobněji představíme, abys sis mohl*a zvolit, která technologie je pro tebe i tvůj projekt ideální.

Co je GraphQL?

GraphQL je dotazovací jazyk pro rozhraní API, který umožňuje deklarativní načítání dat. Klientovi dává možnost přesně specifikovat data, která potřebuje z rozhraní API, a také usnadňuje jeho vývoj v průběhu let.

Teď, když už máš představu o tom, co GraphQL je, si řekneme, co není. Vyhneme se tak nejasnostem, které kolem dotazovacího jazyka panují.

1. Nenech se zmást, ale nejde o dotazovací jazyk, který by měl co dočinění s databázemi a byl alternativou SQL či zcela novým ORM.

2. Nenahrazuje dobře známý REST, ale je jeho alternativou. V mnoha případech se dají spojit v jednom projektu.

3. Dotazovací jazyk GraphQL rozhodně není složitý a nemusíš se ho bát. Dá se poměrně snadno pochopit díky jeho deklarativní povaze, která ti z něj pomůže vytěžit to nejlepší.

Kdo vytvořil jazyk GraphQL

Jazyk GraphQL byl vyvinut interně společností Facebook v roce 2012 a jeho stabilní verze byla vydána teprve v červnu 2018. Od 7. listopadu 2018 byl celý projekt GraphQL přesunut ze společnosti Facebook do nově založené nadace GraphQL Foundation, kterou hostí nezisková organizace Linux Foundation.

Funkce jazyka GraphQL

Pro lepší pochopení jazyka GraphQL ti níže uvádíme jeho důležité vlastnosti, které tě budou zajímat.

  • Je to staticky typovaný jazyk, takže před jeho použitím nemusíš definovat proměnnou.
  • GraphQL dokáže oddělit front-end od back-end vývoje.
  • Nedochází k nadměrnému nebo nedostatečnému načítání dat.
  • Je jazykově a HTTP agnostický.
  • Dokumentace jazyka GraphQL je dodávána bez dalších nákladů.
  • Pomáhá šetřit šířku pásma.

Výhody jazyka GraphQL

Dalším důležitým parametrem výběru jsou i výhody jazyka GraphQL. I v tomto případě ti vypíšeme ty nejzásadnější, které tě budou zajímat.

  • Jde o deklarativní dotazovací jazyk, který není imperativní.
  • Je hierarchický a zaměřený na výsledek produkovaného řešení.
  • Jazyk GraphQL je silně typovaný. To znamená, že dotazy jsou prováděny v kontextu konkrétního systému.
  • Dotazy v jazyce GraphQL jsou zakódovány v klientovi, nikoli v serveru.
  • Má všechny vlastnosti aplikační vrstvy modelu OSI.
  • Jazyk GraphQL poskytuje lidsky čitelný dotaz.
  • Dá se v něm snadno pracovat s několika databázemi.
  • Data můžeš načíst jediným příkazem call API.
  • Pomůže ti s query batching a query caching.
  • Snadno se dokáže přizpůsobit tvým požadavkům a potřebám.
  • Pomáhá zajišťovat schéma ve vhodném formátu.
  • GraphQL automaticky synchronizuje dokumentaci se změnami API.
  • Vývoj API je možný bez nutnosti verzování.
  • Lze jej použít pro rychlé prototypování aplikací.
  • Pole GraphQL lze sdílet na vyšší úrovni komponent pro opakované použití.
  • Umožňuje vybrat, které funkce se mají vystavit a jak mají fungovat.

Nevýhody jazyka GraphQL

Teď už víš, v čem jazyk GraphQL exceluje. Proto nesmí chybět ani pohled na některé nevýhody, které má a mohou zásadně ovlivnit tvé projekty.

Nahrávání souborů

GraphQL nemá nativní funkci nahrávání souborů. To se dá obejít pomocí kódování Base64, ale náklady na kódování a dekódování tímto způsobem mohou být časově náročné a drahé.

Webové ukládání do mezipaměti

Ukládání do mezipaměti pomáhá snížit častý provoz na serveru, což urychluje požadavky a proces odezvy tím, že často využívané informace zůstávají blízko serveru. Jazyk GraphQL nepodporuje metody ukládání do mezipaměti HTTP ani na ně nespoléhá, místo toho je závislý na mechanismech ukládání do mezipaměti klientů Apollo nebo Relay.

Nevhodné pro malé aplikace:

GraphQL nemusí být nejlepší návrhovou architekturou API pro vytváření malých aplikací. Pokud tvoje aplikace nevyžaduje flexibilnější dotazy, které GraphQL nabízí, je vhodnější použít REST.

Problém se složitými dotazy GraphQL: 

Schopnost jazyka GraphQL dát klientovi přesně to, co chce, může také vést k problémům s šířením dotazů. Pokud klient odešle příliš mnoho vnořených dotazů, může to vést k odeslání nesprávných dotazů, což může být pro server časově velmi náročné. Pro naplnění těchto požadavků je lepší využít REST s vlastními koncovými body.

Co je to REST API?

REST je zkratka pro „Representational State Transfer“, což je softwarový architektonický styl pro distribuované hypermediální systémy. Definuje zásady a omezení pro výměnu zdrojů mezi serverem a klienty. Pokud jsou tyto zásady v rozhraní API dodrženy, označuje se aplikace tohoto rozhraní API jako „RESTful“. Příkladem takového rozhraní je pak například WordPress REST API.

Níže jsou uvedeny některé zásady a omezení, které musí rozhraní API splňovat, aby mohlo být označováno jako RESTful API:

  • Oddělení klienta a serveru: Klienti (front-end) a server (back-end) jsou zcela oddělení a mohou komunikovat pouze prostřednictvím koncových bodů.
  • Jednotné rozhraní: Data zobrazená v rozhraní jsou stejná ve všech zařízeních.
  • Bezstavovost: Server si nepamatuje, zda je aktuální požadavek zadáván poprvé, nebo ne. Při každém požadavku musí obsahovat všechny informace potřebné k jeho zpracování od samotného začátku.
  • Možnost ukládání do mezipaměti: Ukládání dat do mezipaměti a relací je povoleno, ale musí být nakonfigurováno tak, aby koncoví uživatelé mohli ukládání dat do mezipaměti odmítnout.
  • Vrstevnatá architektura systému: Rozhraní API musí být navrženo tak, aby klient ani server nemohli určit, zda komunikují přímo, nebo přes prostředníka.

Důležité vlastnosti REST API

Pro představu ti opět uvádíme důležité vlastnosti, které tě určitě u REST API budou zajímat.

  • REST má jednotné rozhraní.
  • Služby REST lze škálovat a dosáhnout tak vysokého výkonu, který pokryje požadavky klientů.
  • Ke zdrojům lze snadno přistupovat podle názvu.
  • Rozhraní REST API umožňuje systémům snadný přenos a odesílání nebo přijímání dat.
  • Databázový zdroj v aplikaci lze rychle mapovat na koncovém bodu rozhraní REST API.
  • REST umožňuje ukládat často používané informace do paměti.
  • Má jednoduchou architekturu a vzor.
  • Rozhraní API REST lze obsluhovat z více než jednoho serveru.

Výhody REST API

Navzdory rostoucí popularitě jazyka GraphQL je REST stále jedním z nejoblíbenějších standardů API. Pojďme se podívat na důvody.

  • Rozhraní API RESTful je nejjednodušší na naučení a pochopení. To je jeho hlavní výhoda oproti ostatním rozhraním API.
  • REST přichází s flexibilním přístupem a formáty pro serializaci dat ve formátu JSON.
  • Rozhraní API REST zvládá vysokou zátěž pomocí proxy serveru HTTP a mezipaměti.
  • Rozhraní REST API má samostatný koncový bod pro různé požadavky, což mu pomáhá zvládnout komplexní požadavek lépe než u jiných API.
  • Rozhraní REST API jsou elegantní, jednoduchá a čistá. Jejich prozkoumání je přímočaré.
  • REST používá standardní volání procedur HTTP k získávání dat a provádění požadavků.
  • Všechny hodnoty vyměňované mezi klientem a serverem mají veškerý kontext potřebný k tomu, aby bylo zřejmé, co se změnilo.

Několik nevýhod REST API

Chybět také nemohou některé nevýhody, které mohou ovlivnit průběh projektu, na kterém budeš pracovat. Níže vypisujeme ty nejzásadnější.

  • Největším problémem rozhraní REST API je povaha koncových bodů. To znamená, že klient k získání všech zdrojů pro kompletní aplikaci musí absolvovat nespočet okružních cest k potřebným datům.
  • Problém nadměrného a nedostatečného načítání je hlavní nevýhodou RESTful API. Může způsobit zpoždění odpovědí kvůli načítání velkých a nežádoucích dat.
  • Vzhledem k tomu, že rozhraní REST API jsou postavena na zdrojích odkazujících na URI, nehodí se pro zdroje, které nejsou přirozeně uspořádány nebo k nimž se nepřistupuje v jednoduché hierarchii.

GraphQL vs. REST: Jaké jsou zásadní rozdíly? 

Teď už máš celkový přehled v obou návrhových rozhraních API. Proto se společně podíváme na hlavní rozdíly mezi GraphQL a REST.

Výkon

Není pochyb o tom, že GraphQL je výkonnější než rozhraní RESTful API, protože poskytuje jediný koncový bod pro přístup ke všem zdrojům. Rozhraní REST používají více koncových bodů, což může mít za následek zpoždění v síti.

Složitost dotazů

Vzhledem k tomu, že koncové body nejsou rozděleny, mohou být dotazy GraphQL časem stále složitější. Naproti tomu koncové body rozhraní RESTful API jsou odděleny, a tak vyžaduje psaní jednoduchých dotazů.

Oblíbenost a podpora komunity

GraphQL je stále oblíbenější návrhové API a dotazovací jazyk. Ačkoli je stále mladý, míra jeho přijetí a zdrojové fondy rychle rostou. Zájemci, kteří se jej chtějí sami naučit, mají k dispozici potřebné informace a zdroje.

Naproti tomu REST se již může pochlubit rozsáhlou podporou komunity a nadále jej používají různé společnosti – od těch, které vytvářejí malé mikroslužby, až po ty, které tvoří komplexní sociální aplikace a další.

Křivka učení

Křivka učení pro GraphQL je strmá. Vyžaduje dobré znalosti v oblasti vývoje API a obecného softwarového inženýrství. Úplný začátečník bude mít problém porozumět jazyku GraphQL tak dobře, aby dokázal vytvořit komplexní aplikaci.

Naproti tomu s REST je velmi snadné začít a vyžaduje méně znalostí z dané oblasti. Rozhraní RESTful API je dobře integrováno do většiny hlavních programovacích jazyků a populárních frameworků, což usnadňuje jeho učení.

Co je lepší – GraphQL, nebo REST?

V článku jsme prozkoumali vše, co potřebuješ vědět o GraphQL a RESTful API, včetně výhod a nevýhod jednotlivých technologií, aby ses mohl*a s jistotou rozhodnout, které z nich dáš přednost.

Teď máš dostatek informací k tomu, abys ses mohl*a rozhodnout, zda je pro tvůj příští projekt vhodnější GraphQL, nebo REST. Když si budeš chtít prohloubit své znalosti v oblasti vývoje webových aplikací a jednotlivých řešení, přihlas se na jeden z našich kurzů.

Autor: Martin Šlat

Více článků
Příručka od robot_dreams s příkladem syntaxe
Kam se dnes posouvají technologické hranice robotiky?