GraphQL vyvinul Facebook v roce 2012 (open-source od roku 2015) jako řešení problémů s efektivitou mobilních aplikací. Je to silně typovaný jazyk, který umožňuje klientům získat všechna potřebná data v rámci jediného síťového požadavku.
V tradičním RESTu musíte často volat několik adres (např. `/uzivatel/1` a pak `/uzivatel/1/prispevky`), abyste získali kompletní data. GraphQL to mění:
—
Provoz GraphQL stojí na třech základních operacích:
—
Srdcem každého GraphQL API je Schema, které definuje, jaká data jsou dostupná. Používá k tomu jazyk SDL (Schema Definition Language).
# Definice typu na serveru
type Uzivatel {
id: ID!
jmeno: String!
email: String
prispevky: [Prispevek]
}
# Dotaz od klienta
query {
uzivatel(id: "42") {
jmeno
email
}
}
—
GraphQL neříká, jak máte data ukládat. Na serveru existují funkce zvané Resolvery, které mají za úkol „vyřešit“ (získat) konkrétní pole dotazu. Jeden resolver může sahat do SQL databáze, druhý do NoSQL a třetí může volat úplně jiné API.
—
| Výhody | Nevýhody |
|---|---|
| Flexibilita: Klient si říká o strukturu dat. | Komplexita: Náročnější implementace na straně serveru. |
| Typová bezpečnost: Automatická dokumentace a validace. | Cachování: Je složitější než u RESTu (HTTP cache zde nefunguje). |
| Verzování: Není potřeba `/v1/`, `/v2/` – stačí přidávat nová pole. | N-plus-one problém: Riziko neefektivních databázových dotazů. |
—
Související články:
Tagy: programming api graphql facebook web-development backend query-language