GraphQL vodič za početnike: Što je, značajke i primjer

Što je GraphQL?

Graphql je tehnologija aplikacijskog sloja na strani poslužitelja koju je razvio Facebook za izvršavanje upita s postojećim podacima. GraphQL može optimizirati RESTful API pozive. Omogućuje deklarativan način dohvaćanja i ažuriranja vaših podataka. GraphQL vam pomaže pri učitavanju podataka s poslužitelja na klijenta. Programerima omogućuje odabir vrsta zahtjeva koje žele postavljati.

Zašto koristiti GraphQL?

Slijede razlozi korištenja GraphQL-a:

  • Pruža čovjeku čitljiv upit.
  • U GraphQL-u vrlo je lako raditi s mnogim bazama podataka.
  • Pogodan je za mikroservise i složene sustave.
  • Podatke možete dohvatiti jednim API pozivom.
  • Pomaže vam u grupiranju upita i predmemoriranju.
  • Ne suočavate se s problemima prekomjernog ili nedovoljno dohvaćanja.
  • Prilagođavanje zahtjeva vašim potrebama.
  • Pomaže vam da otkrijete shemu u odgovarajućem formatu.
  • GraphQL automatski sinkronizira dokumentaciju s promjenama API-ja.
  • Evolucija API-ja moguća je bez izrade verzija.
  • GraphQL polja koriste se u višestrukim upitima koji se mogu dijeliti na višoj razini komponente za ponovnu upotrebu.
  • Možete odabrati koje ćete funkcije izložiti i kako rade.
  • Može se koristiti za brzu izradu prototipova aplikacija.

Primjene GraphQL-a

Evo važnih aplikacija GraphQL-a:

  • Omogućuje Relay i druge klijentske okvire
  • GraphQL vam pomaže poboljšati performanse mobilne aplikacije.
  • Može smanjiti problem prekomjernog dohvaćanja tako da smanji uslugu oblaka na strani poslužitelja i smanji upotrebu mreže na strani klijenta.
  • Može se koristiti kada klijentska aplikacija mora odrediti koja su polja potrebna u formatu dugog upita.
  • GraphQL se može u potpunosti iskoristiti kada morate dodati funkcionalnost svom starom ili postojećem API-ju.
  • Koristi se kada morate pojednostaviti složeni API.
  • Mix and mash fasadni uzorak, koji se obično koristi u objektno orijentiranom programiranju.
  • Kada morate agregirati podatke s više od jednog mjesta u jedan praktični API.
  • GraphQL možete koristiti kao apstrakciju na postojećem API-ju za određivanje strukture odgovora na temelju potreba korisnika.

Što trebate naučiti prije učenja GraphQl-a?

Ovaj vodič za GraphQL temelji se na Izraziti međutim NodeJs. Stoga možete vrlo lako naučiti GraphQL uz osnovno razumijevanje NodeJS-a.

GraphQL ključne komponente

Sada u ovom vodiču za GraphQL, naučimo ključne komponente GraphQL-a:

GraphQL ključne komponente
GraphQL ključne komponente

Kao što je prikazano na gornjoj slici, postoje tri ključne komponente GraphQL-a: 1) upit, 2) razrješivač i 3) shema.

Pitanje

Upit je API zahtjev koji postavlja aplikacija klijentskog stroja. Podržava proširenja i ukazuje na nizove. Upit se koristi za čitanje ili dohvaćanje vrijednosti.

Dijelovi upita:

Slijede važni dijelovi upita

  1. Polje:

Polje jednostavno označava da od poslužitelja tražimo određene informacije. Slijedi GraphQL primjer polja u graphQL upitu.

query {
    team {
        id name
    }
}

"data": {
    "team":[ {
        "id": 1, 
        "name": "Avengers"
    }
    ,
    …
]
}
}

U gornjem primjeru GraphQL-a tražimo od poslužitelja polje pod nazivom tim i njegova potpolja kao što su ID i ime. GraphQL poslužitelj vraća podatke koje smo tražili.

  1. argumenti

In OSTALO, možemo proslijediti samo jedan skup argumenata kao segmente URL-a i parametre upita. Da biste dobili određeni profil, tipični REST poziv izgledat će ovako:

GET /api'team?id=2 Content-Type: application JSON
 {
    "id": 2, 
    "name": "Justice League."
}

resolver

Resolveri daju upute za pretvaranje GraphQL operacije u podatke. Oni rješavaju upit prema podacima definiranjem funkcija razrješitelja.

Poslužitelju prikazuje proces kao i lokaciju za dohvaćanje podataka prema određenom polju. Razrešivač također odvaja shemu baze podataka i API shemu. Odvojene informacije pomažu u modificiranju sadržaja dobivenog iz baze podataka.

Shema

GraphQL shema središte je GraphQL implementacije. Opisuje funkcionalnost koja je dostupna klijentima koji se na njega povezuju.

Značajke GraphQL-a

Evo važnih značajki GraphQL-a:

  • Omogućuje deklarativni jezik upita, što nije imperativ.
  • Hijerarhijski je i usmjeren na proizvod.
  • GraphQL je strogo tipiziran. To znači da se upiti izvršavaju unutar konteksta određenog sustava.
  • Upiti u GraphQL kodirani su u klijentu, a ne u poslužitelju.
  • Ima sve značajke aplikacijskog sloja OSI modela.

GraphQL klijenti

GraphQL klijent je kod koji šalje POST zahtjeve relevantnom GraphQL poslužitelju. Možete izravno postaviti upit GraphQL API-ju, ali dobar je pristup iskoristiti namjensku klijentsku biblioteku pomoću Relaya.

Ova JavaBiblioteku skripti razvio je Facebook za izradu React aplikacija s GraphQL-om. GraphQL klijenti mogu biti CMS poput Drupala, aplikacija za jednu stranicu, mobilna aplikacija itd.

GraphQL poslužitelji

GraphQL poslužitelji su poslužiteljska implementacija specifikacije GraphQL-a. Prikazuje vaše podatke kao GraphQL API, za koji vaš klijentski program može tražiti baza podataka.

GraphQL pristupnici

Gateway je uzorak mikroservisa u kojem možete izgraditi zasebnu uslugu kako biste se nosili s drugim pozadinskim uslugama. Nudi funkcionalnu dokumentaciju i praktičan način prikupljanja podataka iz više od jednog izvora s jednim zahtjevom.

Što je varijabla u GraphQL-u?

A Varijabla u GraphQL-u koristi se za odvajanje dinamičkih vrijednosti od upita klijenta i prosljeđivanje upita kao jedinstvenog rječnika. Varijabla u GraphQL-u također se može koristiti za ponovnu upotrebu upita ili mutacija koje je napisao klijent s pojedinačnim argumentima. U graphQL-u ne možete proslijediti dinamičke argumente izravno u nizu upita. Razlog je taj što kod na strani klijenta mora dinamički manipulirati nizom upita u trenutku kada pokrenete program.

GraphQL ima jedan dobar način za faktorizaciju dinamičkih vrijednosti iz upita. Pronosi ih kao zaseban rječnik. Te su vrijednosti poznate kao varijable. Kad god radimo s varijablama, moramo učiniti sljedeće tri stvari:

  1. Zamijenite statičku vrijednost u upitu imenom varijable.
  2. Deklarirajte naziv varijable kao jednu od varijabli koje prihvaća GraphQL upit.
  3. Proslijedite vrijednost u rječniku varijabli specifičnom za transport.

Evo kako to sve skupa izgleda:

query HeroNameAndFriends($episode: Episode) {
  hero(episode: $episode) {
    name
    friends {
      name
    }
  }
}
{
  "episode": "JEDI"
}
{
  "data": {
    "hero": {
      "name": "R2-D2",
      "friends": [
        {
          "name": "Luke Skywalker"
        },
        {
          "name": "Han Solo"
        },
        {
          "name": "Leia Organa"
        }
      ]
    }
  }
}

Kao što možete vidjeti u gornjem primjeru GraphQL-a, jednostavno smo proslijedili drugu varijablu osim potrebe za konstruiranjem novog upita.

Što je mutacija?

Mutacija je način promjene skupa podataka u GraphQL-u. Modificira podatke u pohrani podataka i vraća vrijednost. Mutacije vam pomažu u umetanju, ažuriranju ili brisanju podataka. Općenito, mutacije su definirane kao dio sheme.

Točke koje treba uzeti u obzir prilikom dizajniranja GraphQL mutacija

Evo važnih točaka pri dizajniranju GraphQL-a:

  • imenovanje: Prije svega, svoje mutacije morate imenovati glagolom. Zatim imenica ili "objekt" ako je primjenjivo. Koristite veliko i veliko slovo pri imenovanju mutacija.
  • Specifičnost: Morate učiniti što je moguće više specifičnim za mutaciju. Mutacije bi trebale predstavljati semantičke radnje koje poduzima korisnik.
  • Ulazni objekt: Koristite jednu, jedinstvenu, potrebnu, ulazni tip objekta kao argument za izvršavanje mutacije na klijentu.
  • Jedinstvena vrsta nosivosti: Trebali biste koristiti jedinstvenu vrstu nosivosti za svaku mutaciju. Također možete dodati izlaz mutacije kao polje toj određenoj vrsti nosivosti.
  • Gniježđenje: Koristite ugniježđivanje svoje mutacije gdje god ima smisla. Omogućuje vam da u potpunosti iskoristite GraphQL API.

Razlika između GraphQL i REST-a

Sljedeća tablica pokazuje važnu razliku između GraphQL i REST.

Graphql OSTALO
Slijedi arhitekturu vođenu klijentima. Slijedi arhitekturu koju pokreće poslužitelj.
GraphQL se može organizirati u smislu sheme. REST se može organizirati u smislu krajnjih točaka.
GraphQL je rastuća zajednica. REST je vrlo velika zajednica.
Brzina razvoja u GraphQL-u je velika. Brzina razvoja u REST-u je Spora.
Krivulja učenja u GraphQL-u je teška. Krivulja učenja u REST-u je umjerena.
Identitet je odvojen od načina na koji ga dohvaćate. Krajnja točka koju pozivate u REST-u je identitet određenog objekta.
U GraphQL-u poslužitelj određuje dostupne resurse. Oblik i veličinu resursa određuje poslužitelj u REST-u.
GraphQL pruža visoku dosljednost na svim platformama. Teško je postići dosljednost na svim platformama.

Nedostaci GraphQL-a

Evo nedostataka GraphQL-a:

  • Mladi ekosustav
  • Nedostatak resursa na pozadinskom dijelu.
  • Nedostaje uzorak dizajna za složenu aplikaciju.
  • Problemi s izvedbom kod složenih upita.
  • Pretjerano za male primjene
  • GraphQL ne ovisi o metodama HTTP predmemoriranja koje omogućuju pohranu sadržaja zahtjeva.
  • GraphQL ne razumije datoteke. Stoga značajka učitavanja datoteka nije uključena u njega.
  • S GraphQL-om budite spremni imati mnogo predrazvojne edukacije poput učenja Schema Definition Language.

Aplikacije i alati otvorenog koda koje koristi GraphQL

Važne aplikacije i alati otvorenog koda koje koristi GraphQL su sljedeći:

  • Gatsby: Gastby je aplikacija koju pokreće GraphQL koja može koristiti podatke koji su izvedeni iz više od jednog GraphQL API izvora. Možete ga koristiti za razvoj statične i klijentski bazirane React aplikacije.
  • GraphiQL: To je ID koji se integrira s preglednikom i također komunicira s API-jem GraphQL-a. Neke od funkcija koje uključuje GraphiQL su mutacije, upiti za podatke i upiti za automatsko dovršavanje.
  • Igralište GraphQL: To je moćan IDE koji ima ugrađeni uređivač za rukovanje mutacijama, provjerom valjanosti, GraphQl upitima, pretplatama itd. Programer može koristiti ovaj IDE za vizualizaciju strukture sheme.
  • prizma: Prisma je sloj apstrakcije baze podataka koji vaše baze podataka pretvara u GraphQL API-je s CRUD (Create, Read, Update and Delete) operacijama.
  • Bit: To je alat otvorenog koda i platforma koja pretvara kod za višekratnu upotrebu u komponente. Programeri ih mogu koristiti za dijeljenje i razvoj raznih projekata.

Rezime

  • GraphQL je tehnologija na strani poslužitelja aplikacijskog sloja koju je razvio Facebook za izvršavanje upita s postojećim podacima.
  • Možete koristiti GraphQL za dohvaćanje podataka jednim API pozivom.
  • GraphQL vam pomaže poboljšati performanse mobilne aplikacije.
  • Važne komponente GraphQL upita su: 1) Upit, 2) Razrješivač, 3) Shema.
  • GraphQL je strogo tipiziran. To znači da se upiti izvršavaju unutar konteksta određenog sustava.
  • GraphQL klijent je kod koji šalje POST zahtjeve relevantnom GraphQL poslužitelju.
  • GraphQL poslužitelji su poslužiteljska implementacija specifikacije GraphQL-a.
  • Gateway je uzorak mikroservisa u kojem možete izgraditi zasebnu uslugu kako biste se nosili s drugim pozadinskim uslugama.
  • GraphQL ima jedan dobar način za faktorizaciju dinamičkih vrijednosti iz upita.
  • Mutacija je način promjene skupa podataka u GraphQL-u.
  • Važne točke pri dizajniranju GraphQL-a su: 1) Imenovanje, 2) Specifičnost, 3) Ulazni objekt Jedinstvena vrsta nosivosti i 4) Ugniježđenje.
  • GraphQL se može organizirati u smislu sheme, dok se REST može organizirati u smislu krajnjih točaka.
  • Nedostatak GraphQL-a je nedostatak resursa na pozadinskom dijelu.