Pro vytváření a distribuci aplikací existuje mnoho architektonických standardů s otevřeným zdrojovým kódem. Nejoblíbenější jsou REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) a GraphQL API.
RESTful API jsou nejpoužívanějším architektonickým standardem API. Pokud jste napsali komplexní RESTful API s mnoha koncovými body, pravděpodobně jste si uvědomili, jak mohou být komplikované. To platí zejména v případě, že jsou mezi koncovými body jen nepatrné rozdíly.
Můžete se také setkat s problémy s načítáním dat, protože rozhraní RESTful API nejsou dostatečně flexibilní k výběru konkrétních dat. GraphQL řeší tyto problémy RESTful API.
Co je GraphQL?
GraphQL (Graph Query Language) je dotazovací jazyk a runtime pro vytváření rozhraní API. Na rozdíl od REST API s mnoha koncovými body pro spotřebu dat, GraphQL API mají jeden vstupní bod. Konkrétní data můžete načíst tak, že je popíšete v dotazech.
The Specifikace GraphQL definuje dotazovací jazyk a způsob fungování serverů GraphQL. Můžete vytvářet a používat GraphQL API v jazycích na straně serveru od Pythonu po
Javascripta jakýkoli jazyk, který podporuje HTTP.Meta vytvořila GraphQL v roce 2012 jako alternativu k REST pro budování na HTTP. Vydali GraphQL jako open-source standard v roce 2015. Dnes nadace GraphQL dohlíží na vývoj specifikace GraphQL.
GraphQL je poměrně nový, s nízkým přijetím a jeho používání má skryté náklady. Vytváření rozhraní API GraphQL může být zbytečně složité, zejména u malých projektů s několika koncovými body.
Také všechny požadavky GraphQL nakonec vrátí stavový kód 200 bez ohledu na stav požadavku.
Jak GraphQL funguje?
Na rozdíl od REST, který je orientován na zdroje, GraphQL vyžaduje, abyste přemýšleli o datech jako o grafu pro interakci s daty. Můžete určit strukturu dat a specifikace poskytuje robustní rozhraní dotazů pro interakci s API přes HTTP. Budete moci používat různé funkce v závislosti na Balíček nebo knihovna GraphQL se rozhodnete použít.
Schémata GraphQL zahrnují typy objektů, které definují požadovaný objekt a jeho dostupná pole. U dotazů a mutací API balíček GraphQL ověřuje dotazy a provádí dotazy na základě zadaných funkcí obslužných rutin (řešičů).
Proč byste měli používat GraphQL?
REST je snadno použitelný standard a většina programovacích jazyků má nástroje pro rychlé vytváření RESTful API. Existuje však mnoho problémů s vytvářením a používáním RESTful API.
Zde jsou některé z problémů s REST, kvůli kterým vývojáři preferují GraphQL pro některé případy použití.
Neefektivní načítání dat
RESTful API předávají data na základě specifikace koncového bodu. Nejsou dostatečně flexibilní, aby načítali data nad rámec toho, co je pevně zakódováno ve funkci handleru koncového bodu.
Předpokládejme, že koncový bod vrátí seznam dat při volání a vy potřebujete zadat hodnoty nebo kritéria pro pole. V takovém případě musí vývojář vytvořit koncový bod a definovat obchodní logiku pro vrácení dat. Cenný zdroj můžete analyzovat ručně, což nakonec zabere více času.
GraphQL řeší problém neefektivního načítání dat, protože můžete dotazovat API, abyste flexibilně vrátili data na základě kritérií a specifikací.
GraphQL API jsou interaktivní; můžete zadat data, která potřebujete načíst, ve snadno čitelné syntaxi.
{
uživatel (kde: {age: {_eq: "89"}}) {
název
škola(kde: {naživu: {_eq: true}}) {
bio
národnost
}
}
}
Dotaz GraphQL výše dotazy a uživatel schéma pro záznamy, kde stáří pole je 89. Dotaz má vložený dotaz na položky, kde je naživu pole hodnotí skutečný. Vrací pole jména, bio a národnosti ze schématu.
Rychlý vývoj
Vytváření a používání rozhraní GraphQL API je snazší než použití REST, zejména s rostoucí velikostí projektu. Během vývojové fáze nemusíte vyvíjet tolik tras a funkcí obsluhy jako při vývoji RESTful API. Spotřeba GraphQL API není tak únavná jako RESTful API.
V REST poskytují různé koncové body přístup k různým zdrojům, na rozdíl od GraphQL, kde je jeden koncový bod. To přináší flexibilitu a výkon a dotazy mohou volat různé funkce resolveru.
Jazyk definice schématu GraphQL
Jazyk GraphQL Schema Definition Language (SDL) určuje schémata pro služby GraphQL.
Syntaxe GraphQL SDL je snadno čitelná a pochopitelná. Strukturu svého schématu určíte v souboru s příponou .graphql nebo .graphqls rozšíření.
typ Člověk {
název: Tětiva!
věk: Int!
}vstup AddHuman {
název: Tětiva!
věk: Int!
}typ Mutace {
CreateHuman (vstup: AddHuman!): Člověk!
DeleteHuman (id: Int!): Tětiva!
UpdateHuman (id: Int!): Tětiva!
}
typ Dotaz {
GetHuman (id: Int!): Člověk!
GetHumans: [Člověk!]!
}
Výše uvedený kód GraphQL je schéma pro GraphQL API definující strukturu API pro požadavky. Schéma definuje funkcionalitu CRUD pro API.
Na straně klienta, na základě struktury schématu a dat nebo operace klienta, může klient provést dotaz (GET nebo DELETE in REST) nebo a mutace (PUT nebo POST).
Zde je příklad dotazu na Člověk schéma.
dotaz Člověk {
název
stáří
}
Výše uvedený dotaz by vrátil lidské schéma název a stáří terénní údaje.
Mutace GraphQL mají na rozdíl od dotazů docela odlišnou syntaxi. Zde je příklad operace mutace na Člověk schéma.
mutace {
CreateHuman (vstup: název:"muž", věk: 1000000000000000,}) {
název
stáří
}
}
Vstupy mutačního kódu název a stáří polí klientovi a vrátí data z polí.
Při vytváření rozhraní GraphQL API budete potřebovat úložiště dat, aby bylo možné přetrvávat. Stejně jako REST a většina webových architektur založených na HTTP je GraphQL bezstavový a pro svou aplikaci můžete použít libovolné úložiště dat nebo databázi.
Vytváření GraphQL API
GraphQL je specifikace a můžete vytvořit GraphQL v nejoblíbenějších jazycích na straně serveru. Budete muset najít knihovnu s funkcemi, které potřebujete pro svůj projekt.
Při výběru knihovny GraphQL chcete použít knihovnu bohatou na funkce, která podporuje všechny typy a operace GraphQL. Většina knihoven používá přístup nejprve schéma nebo kód. V prvním z nich definujete schéma GraphQL a knihovna generuje resolvery a standardní kód. V druhém případě napevno kódujete překladače, aniž byste definovali schéma.
GraphQL získává přijetí
Od počátku GraphQL uvolnili vývojáři a společnosti nástroje pro zjednodušení jeho používání. Ty mohou zkrátit dobu vývoje u menších a středních projektů.
Chcete-li se dozvědět více, můžete se podívat na klienty GraphQL s otevřeným zdrojovým kódem, dokumentaci GraphQL a její specifikace.