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:
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
- 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.
- 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:
- Zamijenite statičku vrijednost u upitu imenom varijable.
- Deklarirajte naziv varijable kao jednu od varijabli koje prihvaća GraphQL upit.
- 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.