Web Developmentpokročilý

Čo je GraphQL?

GraphQL je dopytovací jazyk pre API a serverový runtime na vykonávanie týchto dopytov. Vyvinul ho Facebook v roku 2012 a verejne ho sprístupnil v roku 2015. Na rozdiel od REST umožňuje klientovi presne špecifikovať, aké dáta potrebuje.

Definícia GraphQL

Čo je GraphQL

GraphQL je open-source dopytovací jazyk pre API, ktorý interne vyvinul Facebook v roku 2012 pre potreby svojej mobilnej aplikácie. Verejne bol uvoľnený v roku 2015 a od roku 2018 je spravovaný neziskovou organizáciou GraphQL Foundation pod záštitou Linux Foundation.

GraphQL rieši dva hlavné problémy REST API: over-fetching (server vracia viac dát, než klient potrebuje) a under-fetching (klient musí posielať viacero požiadaviek, aby získal všetky potrebné dáta).

Kľúčové koncepty

  • Queries (dopyty) — klient definuje presnú štruktúru dát, ktoré chce získať
  • Mutations (mutácie) — operácie na zmenu dát (vytváranie, aktualizácia, mazanie)
  • Subscriptions (odber) — real-time notifikácie, keď sa dáta zmenia
  • Schema — striktne typovaný popis všetkých dostupných dát a operácií, napísaný v SDL (Schema Definition Language)

GraphQL využívajú spoločnosti ako GitHub, Shopify, Twitter a Airbnb. Na rozdiel od REST, kde každý endpoint vracia fixnú štruktúru, GraphQL má typicky jeden endpoint (/graphql) a klient si sám určí, čo chce.

Praktický príklad

Príklad: Chcete na stránke e-shopu zobraziť produkt aj s recenziami.

S REST API: Musíte poslať dve požiadavky — GET /produkty/123 a GET /produkty/123/recenzie. Každá vráti aj dáta, ktoré nepotrebujete.

S GraphQL: Pošlete jednu požiadavku a presne špecifikujete, čo chcete: názov produktu, cenu a posledné 3 recenzie. Server vráti presne tieto dáta — nič viac, nič menej.

Často kladené otázky

Čo je GraphQL a kto ho vytvoril?

GraphQL je dopytovací jazyk pre API vyvinutý Facebookom v roku 2012. Umožňuje klientovi presne špecifikovať, aké dáta potrebuje, čím eliminuje zbytočný prenos dát.

Aký je rozdiel medzi GraphQL a REST?

REST má viacero endpointov, kde každý vracia fixnú štruktúru dát. GraphQL má jeden endpoint, kde klient v dopytu presne definuje štruktúru odpovede. GraphQL eliminuje over-fetching a under-fetching.

Kedy použiť GraphQL namiesto REST?

GraphQL je výhodný pri komplexných dátových modeloch, mobilných aplikáciách (kde záleží na veľkosti prenesených dát) a projektoch s rýchlo sa meniacimi požiadavkami na frontend. Pre jednoduché CRUD API môže byť REST jednoduchší.

Je GraphQL náhrada za REST?

Nie nutne. GraphQL a REST môžu koexistovať v jednom projekte. GraphQL je vhodnejší pre komplexné dopyty, zatiaľ čo REST je jednoduchší na implementáciu pre jednoduché operácie.

Súvisiace pojmy

REST API

REST (Representational State Transfer) je softvérový architektonický štýl pre vytváranie webových služieb. Definuje pravidlá, ako by mali klient a server komunikovať cez HTTP protokol. REST API je dnes najrozšírenejší spôsob, akým webové aplikácie a mobilné appky získavajú a odosielajú dáta.

OpenAPI

OpenAPI (predtým Swagger Specification) je štandard na popis REST API v strojovo čitateľnom formáte (YAML alebo JSON). Spravuje ho OpenAPI Initiative pod záštitou Linux Foundation. Umožňuje automatické generovanie dokumentácie, klientských knižníc a testov.

SDK (Software Development Kit)

SDK (Software Development Kit) je sada nástrojov, knižníc, dokumentácie a príkladov kódu, ktorá vývojárom uľahčuje vytváranie aplikácií pre konkrétnu platformu alebo službu. SDK zjednodušuje prácu s API tým, že poskytuje hotové funkcie namiesto priameho volania HTTP požiadaviek.

Webhook

Webhook je mechanizmus, pri ktorom jedna aplikácia automaticky pošle HTTP požiadavku na druhú aplikáciu, keď nastane určitá udalosť. Pojem „webhook" zaviedol programátor Jeff Lindsay v roku 2007. Webhooky fungujú na princípe push notifikácií — namiesto opakovaného dotazovania server sám oznámi zmenu.

JWT (JSON Web Token)

JWT (JSON Web Token) je navrhovaný internetový štandard (RFC 7519) pre vytváranie prístupových tokenov vo formáte JSON s voliteľným podpisom a šifrovaním. Používa sa predovšetkým na autentifikáciu používateľov a bezpečný prenos údajov medzi aplikáciami.

Potrebujete pomôcť s webom?

Napíšte mi a poradím vám s vaším projektom. Prvá konzultácia je zadarmo a nezáväzná.