GraphQL: Alternatíva k REST na HTTP

GraphQL: Alternatíva k REST na HTTP

Na vytváranie a distribúciu aplikácií existuje veľa architektonických štandardov s otvoreným zdrojom. Najpopulárnejšie sú REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) a GraphQL API.





RESTful API sú najpoužívanejším API architektonickým štandardom. Ak ste napísali komplexné RESTful API s mnohými koncovými bodmi, pravdepodobne ste si uvedomili, aké zložité môžu byť. To platí najmä vtedy, ak sú medzi koncovými bodmi len malé rozdiely.





VYUŽITIE VIDEA DŇA

Môžete sa stretnúť aj s problémami s načítaním údajov, pretože rozhrania RESTful API nie sú dostatočne flexibilné na výber konkrétnych údajov. GraphQL rieši tieto problémy RESTful API.





Čo je GraphQL?

GraphQL (Graph Query Language) je dotazovací jazyk a runtime na vytváranie API. Na rozdiel od REST API s mnohými koncovými bodmi na spotrebu údajov, GraphQL API majú jeden vstupný bod. Konkrétne údaje môžete získať tak, že ich opíšete v dopytoch.

The GraphQL špecifikácia definuje dopytovací jazyk a spôsob fungovania serverov GraphQL. Rozhrania GraphQL API môžete vytvárať a používať v jazykoch na strane servera od Pythonu po Javascript a akýkoľvek jazyk, ktorý podporuje HTTP.



Meta vytvorila GraphQL v roku 2012 ako alternatívu k REST pre budovanie na HTTP. GraphQL vydali ako open-source štandard v roku 2015. Dnes nadácia GraphQL dohliada na vývoj špecifikácie GraphQL.

GraphQL je pomerne nový, s nízkou mierou prijatia a jeho používanie má skryté náklady. Vytváranie API GraphQL môže byť zbytočne zložité, najmä pre malé projekty s niekoľkými koncovými bodmi.





Všetky požiadavky GraphQL nakoniec vrátia stavový kód 200 bez ohľadu na stav požiadavky.

Ako funguje GraphQL?

  GraphQL's functions and syntax

Na rozdiel od REST, ktorý je orientovaný na zdroje , GraphQL vyžaduje, aby ste o údajoch uvažovali ako o grafe na interakciu s údajmi. Môžete zadať štruktúru údajov a špecifikácia poskytuje robustné rozhranie dotazu na interakciu s API cez HTTP. V závislosti od toho budete môcť používať rôzne funkcie Balík alebo knižnica GraphQL sa rozhodnete použiť.





Schémy GraphQL zahŕňajú typy objektov, ktoré definujú požadovaný objekt a jeho dostupné polia. Pri dotazoch a mutáciách API balík GraphQL overuje dotazy a spúšťa dotazy na základe špecifikovaných funkcií obsluhy (resolverov).

Prečo by ste mali používať GraphQL?

REST je ľahko použiteľný štandard a väčšina programovacích jazykov má nástroje na rýchle vytváranie RESTful API. Existuje však veľa problémov s vytváraním a používaním RESTful API.

Tu sú niektoré z problémov s REST, kvôli ktorým vývojári uprednostňujú GraphQL pre niektoré prípady použitia.

Neefektívne získavanie údajov

Rozhrania RESTful API prenášajú údaje na základe špecifikácie koncového bodu. Nie sú dostatočne flexibilné na to, aby získavali údaje nad rámec toho, čo je pevne zakódované vo funkcii obsluhy koncového bodu.

Predpokladajme, že koncový bod vráti zoznam údajov pri volaní a vy musíte zadať hodnoty alebo kritériá pre polia. V takom prípade musí vývojár vytvoriť koncový bod a definovať obchodnú logiku na vrátenie údajov. Cenný zdroj môžete analyzovať manuálne, čo nakoniec zaberie viac času.

GraphQL rieši problém neefektívneho získavania údajov, pretože môžete dopytovať rozhrania API, aby ste flexibilne vrátili údaje na základe kritérií a špecifikácií.

GraphQL API sú interaktívne; môžete zadať údaje, ktoré potrebujete získať, v jednoduchej a čitateľnej syntaxi.

{ 
user(where: {age: {_eq: "89"}}) {
name
school(where: {alive: {_eq: true}}) {
bio
nationality
}
}
}

Dotaz GraphQL uvedený vyššie dopytuje a užívateľ schéma pre záznamy, kde Vek pole je 89. Dotaz má vložený dotaz na položky, kde je nažive pole hodnotí pravda . Vráti názov, životopis a národnosť zo schémy.

Rýchly rozvoj

Vytváranie a používanie rozhraní GraphQL API je jednoduchšie ako používanie REST, najmä ak sa veľkosť projektu zvyšuje. Počas vývojovej fázy nemusíte vyvíjať toľko trás a funkcií obsluhy ako pri vývoji RESTful API. Spotreba GraphQL API nie je taká únavná ako RESTful API.

V REST poskytujú rôzne koncové body prístup k rôznym zdrojom, na rozdiel od GraphQL, kde je jeden koncový bod. To prináša flexibilitu a výkon a dotazy môžu volať rôzne funkcie prekladača.

Jazyk definície schémy GraphQL

Jazyk GraphQL Schema Definition Language (SDL) špecifikuje schémy pre služby GraphQL.

Syntax GraphQL SDL je ľahko čitateľná a zrozumiteľná. Štruktúru vašej schémy zadáte v súbore s príponou .graphql alebo .graphqls rozšírenie.

type Human { 
name: String!
age: Int!
}

input AddHuman {
name: String!
age: Int!
}

type Mutation {
CreateHuman(input: AddHuman!): Human!
DeleteHuman(id: Int!): String!
UpdateHuman(id: Int!): String!
}

type Query {
GetHuman(id: Int!): Human!
GetHumans: [Human!]!
}

Vyššie uvedený kód GraphQL je schéma pre GraphQL API, ktorá definuje štruktúru API pre požiadavky. Schéma definuje funkčnosť CRUD pre API.

Na strane klienta môže klient na základe štruktúry schémy a údajov alebo operácie klienta vykonať dopyt (GET alebo DELETE in REST) ​​alebo a mutácia (PUT alebo POST).

Tu je príklad dotazovania na Ľudské schému.

query Human { 
name
age
}

Vyššie uvedený dotaz by vrátil ľudskú schému názov a Vek terénne údaje.

Mutácie GraphQL majú dosť odlišnú syntax na rozdiel od dotazov. Tu je príklad operácie mutácie na Ľudské schéma.

ako nájsť názov piesne vo videu
mutation { 
CreateHuman(input:{ name:"man", age:1000000000000000,}) {
name
age
}
}

Vstupy kódu mutácie názov a Vek polia klientovi a vráti údaje z polí.

Pri vytváraní rozhrania GraphQL API budete potrebovať úložisko údajov, aby ste si zachovali stálosť. Rovnako ako REST a väčšina webových architektúr založených na HTTP, aj GraphQL je bezstavový a pre svoju aplikáciu môžete použiť ľubovoľné úložisko údajov alebo databázu.

Vytvorenie rozhrania GraphQL API

  GraphQL podporované jazyky

GraphQL je špecifikácia a môžete zostaviť GraphQL v najpopulárnejších jazykoch na strane servera. Budete musieť nájsť knižnicu s funkciami, ktoré potrebujete pre svoj projekt.

Pri výbere knižnice GraphQL chcete použiť knižnicu s množstvom funkcií, ktorá podporuje všetky typy a operácie GraphQL. Väčšina knižníc používa buď prístup schémy alebo kódu. V prvom z nich definujete schému GraphQL a knižnica generuje resolvery a štandardný kód. V druhom prípade napevno kódujete prekladače bez definovania schémy.

GraphQL získava prijatie

Od vzniku GraphQL vývojári a spoločnosti vydali nástroje na zjednodušenie jeho používania. Tieto môžu skrátiť čas vývoja pre menšie a stredné projekty.

Ak sa chcete dozvedieť viac, môžete si pozrieť klientov GraphQL s otvoreným zdrojom, dokumentáciu GraphQL a jej špecifikáciu.