GraphQL-i õpetus algajatele: mis on, funktsioonid ja näide
⚡ Nutikas kokkuvõte
GraphQL on serveripoolne päringukeel, mis võimaldab kliendil ühe päringuga taotleda täpselt vajalikke andmeid. See leht selgitab selle põhikomponente, päringuid, muutujaid, mutatsioone, tellimusi ja seda, kuidas see erineb REST-keelest.
Mis on GraphQL?
GraphQL on rakenduskihi serveripoolne tehnoloogia, mille töötas välja Facebook, nüüdseks Meta, päringute teostamiseks olemasolevate andmetega. See avaldati avalikult 2015. aastal ja seda on haldanud GraphQL. Foundation alates 2018. aastast. GraphQL suudab optimeerida RESTful API kõnesid. See pakub deklaratiivset viisi andmete toomiseks ja värskendamiseks. GraphQL aitab teil andmeid serverist klienti laadida. See võimaldab programmeerijatel valida, millist tüüpi päringuid nad soovivad teha.
Mida on vaja enne GraphQL-i õppimist õppida?
See GraphQL-i õpetus põhineb Ekspress ja SõlmedJs. Seetõttu saate NodeJS-i põhiteadmistega GraphQL-i väga lihtsalt õppida.
Miks kasutada GraphQL-i?
GraphQL-i kasutamise põhjused on järgmised:
- See pakub inimesele loetava päringu.
- GraphQL-is on paljude andmebaasidega väga lihtne toime tulla.
- See sobib mikroteenuste ja keerukate süsteemide jaoks.
- Saate andmeid tuua ühe API-kõnega.
- See aitab teil päringute pakkimist ja vahemällu salvestada.
- Teil ei ole probleeme üle- ega alatoomisega.
- Taotluste kohandamine vastavalt teie vajadustele.
- See aitab teil leida sobivas vormingus skeemi.
- GraphQL hoiab dokumentatsiooni automaatselt API muudatustega sünkroonis.
- API arendamine on võimalik ilma versioonita.
- GraphQL-i välju kasutatakse mitmes päringus, mida saab taaskasutamiseks jagada kõrgema komponendi tasemel.
- Saate valida, milliseid funktsioone kuvada ja kuidas need töötavad.
- Seda saab kasutada kiireks prototüübi loomiseksping.
GraphQL-i rakendused
Siin on GraphQL-i olulised rakendused:
- See pakub relee ja muid kliendiraamistikke
- GraphQL aitab teil mobiilirakenduse jõudlust parandada.
- See võib vähendada ülelaadimisprobleemi, vähendades serveripoolset pilveteenust ja vähendades kliendipoolset võrgukasutust.
- Seda saab kasutada siis, kui klientrakendus peab pika päringuvormingus määrama, milliseid välju on vaja.
- GraphQL-i saab täielikult kasutada, kui peate oma vanale või olemasolevale API-le funktsioone lisama.
- Seda kasutatakse juhul, kui peate lihtsustama keerulist API-d.
- Segage ja segage fassaadimustrit, mida tavaliselt kasutatakse objektorienteeritud programmeerimises.
- Kui peate koondama andmeid rohkem kui ühest kohast ühte mugavasse API-sse.
- Saate kasutada GraphQL-i kõhulihaste harjutusenatracolemasoleval API-l, et määrata vastuse struktuur vastavalt kasutaja vajadustele.
Need eelised tuginevad kõik kolmele liikuvale osale, mis koos töötavad.
GraphQL põhikomponendid
Nüüd selles GraphQL-i õpetuses õpime GraphQL-i põhikomponente:

Nagu ülaltoodud joonisel näidatud, on GraphQL-il kolm põhikomponenti: 1) päring, 2) lahendaja ja 3) skeem.
Query
Päring on API päring, mille teeb klientmasina rakendus. See toetab täiendusi ja osutab massiividele. Päringut kasutatakse väärtuste lugemiseks või toomiseks.
Päringu osad:
Järgnevalt on toodud päringu olulised osad
- Väli:
Väli näitab lihtsalt, et küsime serverilt konkreetset teavet. Järgnevalt on toodud GraphQL-i näide väljast GraphQL-i päringus.
query {
team {
id
name
}
}
Server vastab JSON-dokumendiga, mille kuju peegeldab päringut:
{
"data": {
"team": [
{
"id": 1,
"name": "Avengers"
}
]
}
}
Ülaltoodud GraphQL-i näites küsime serverilt välja nimega meeskond ja selle alamvälju, näiteks id ja nimi. GraphQL-i server tagastab täpselt need andmed, mida küsisime.
- Argumendid
In REST, saame edastada ainult ühe argumentide komplekti, kuna URL segmendid ja päringuparameetrid. Konkreetse profiili saamiseks näeb tüüpiline REST-päring välja järgmine:
GET /api/team?id=2 Content-Type: application/json { "id": 2, "name": "Justice League" }
lahendaja
Resolverid pakuvad juhiseid GraphQL-i toimingute andmeteks teisendamiseks. Nad lahendavad päringu andmetele, määratledes lahendaja funktsioonid.
See kuvab serverile protsessi ja asukoha andmete toomiseks vastavalt konkreetsele väljale. Lahendaja eraldab ka andmebaasi skeemi ja API skeemi. Eraldatud teave aitab muuta andmebaasist saadud sisu.
Skeem
GraphQL-i skeem on GraphQL-i juurutamise keskpunkt. See kirjeldab sellega ühenduse loovatele klientidele saadaolevaid funktsioone.
GraphQL-i omadused
Siin on GraphQL-i olulised funktsioonid:
- See pakub deklaratiivset päringukeelt, mis ei ole kohustuslik.
- See on hierarhiline ja tootekeskne.
- GraphQL on tugevasti trükitud. See tähendab, et päringuid täidetakse konkreetse süsteemi kontekstis.
- Päringud GraphQL-is on kodeeritud kliendis, mitte serveris.
- Sellel on kõik OSI mudeli rakenduskihi funktsioonid.
GraphQL-i kliendid
GraphQL-i klient on kood, mis teeb POST-päringuid asjakohasele GraphQL-serverile. Saate GraphQL API-lt otse päringuid teha, kuid hea lähenemisviis on kasutada spetsiaalset klienditeegi Relay abil.
see JavaSkriptiteegi on välja töötanud Facebook Reacti rakenduste loomiseks GraphQL-iga. GraphQL-i kliendid võivad olla CMS-id nagu Drupal, üheleheline rakendus, mobiilirakendus jne.
GraphQL serverid
GraphQL serverid on GraphQL spetsifikatsiooni serveripoolsed implementatsioonid. See kujutab teie andmeid GraphQL API-na, millele teie klientprogramm saab päringuid esitada. andmebaas.
GraphQL lüüsid
Värav on mikroteenuste muster, kus saab luua eraldi teenuse, mis toimib koos teiste taustteenustega. See pakub toimivat dokumentatsiooni ja mugavat viisi andmete kogumiseks mitmest allikast ühe päringuga.
Mis on GraphQL-i muutuja?
A Muutuja GraphQL-is kasutatakse dünaamiliste väärtuste eraldamiseks kliendipäringust ja päringu edastamiseks ainulaadse sõnaraamatuna. GraphQL-i muutujat saab kasutada ka kliendi individuaalsete argumentidega kirjutatud päringu või mutatsioonide taaskasutamiseks. GraafQL-is ei saa te dünaamilisi argumente otse päringustringis edastada. Põhjus on selles, et kliendipoolne kood peab programmi käitamise ajal päringustringiga dünaamiliselt manipuleerima.
GraphQL-il on üks hea viis dünaamiliste väärtuste faktoriseerimiseks päringust. See edastab need eraldi sõnastikuna. Neid väärtusi nimetatakse muutujateks. Muutujatega töötades peame tegema järgmisi kolme asja:
- Asendage päringu staatiline väärtus muutuja nimega.
- Deklareerige muutuja nimi üheks muutujaks, mille GraphQL päring aktsepteerib.
- Edastage väärtus transpordipõhises muutujate sõnastikus.
Nii see kõik kokku välja näeb. Esmalt päring, mis deklareerib muutuja:
query HeroNameAndFriends($episode: Episode) { hero(episode: $episode) { name friends { name } } }
Seejärel saadetakse sellega koos eraldi muutujate väärtuste sõnastik:
{
"episode": "JEDI"
}
Ja serveri tagastatud vastus:
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{ "name": "Luke Skywalker" },
{ "name": "Han Solo" },
{ "name": "Leia Organa" }
]
}
}
}
Nagu näete ülaltoodud GraphQL-i näites, oleme lihtsalt edastanud mõne muu muutuja peale uue päringu koostamise vajaduse.
Mis on mutatsioon?
Mutatsioon on viis andmestiku muutmiseks GraphQL-is. See muudab andmesalves olevaid andmeid ja tagastab väärtuse. Mutatsioonid aitavad teil andmeid sisestada, värskendada või kustutada. Üldiselt määratletakse mutatsioonid skeemi osana.
Punktid, mida GraphQL-i mutatsioonide kavandamisel arvestada
Siin on olulised punktid GraphQL-i kujundamisel:
- Nime andmine: Kõigepealt peate nimetama oma mutatsioonide tegusõna. Seejärel nimisõna või vajaduse korral "objekt". Kasutage mutatsioonide nimetamisel CamelCase'i.
- Täpsus: Peate muutma mutatsioonispetsiifiliseks nii palju kui võimalik. Mutatsioonid peaksid esindama kasutaja sooritatud semantilisi toiminguid.
- Sisendobjekt: Kasutage kliendil mutatsiooni teostamiseks argumendina ühte, ainulaadset nõutavat sisendobjekti tüüpi.
- Unikaalne kandevõime tüüp: Iga mutatsiooni jaoks peaksite kasutama ainulaadset kasuliku koormuse tüüpi. Saate lisada ka mutatsiooni väljundi väljana sellele konkreetsele kasuliku koormuse tüübile.
- Pesastumine: Kasutage oma mutatsiooni pesastamist kõikjal, kus see on mõttekas. See võimaldab teil GraphQL API-t täielikult kasutada.
Päringud loevad ja mutatsioonid kirjutavad. Kolmas operatsioonitüüp hõlmab andmeid, mis muutuvad kliendi ühenduse ajal.
Mis on GraphQL-is tellimus?
A tellimine on GraphQL-i spetsifikatsioonis kolmas operatsioonitüüp koos päringu ja mutatsiooniga. Päring ja mutatsioon sooritatakse mõlemad ühe päringu ja vastusega. Selle asemel hoiab tellimus avatuna pikaajalist ühendust, tavaliselt WebSocketsi kaudu, nii et server saadab kliendile uue tulemuse iga kord, kui toimub määratud sündmus.
Süntaks peegeldab päringut, kus märksõna „query” asendab märksõna „query”:
subscription OnCommentAdded($postId: ID!) { commentAdded(postId: $postId) { id content author { name } } }
Praktikas eristavad tellimusi kolm punkti.
- Sündmuspõhine, küsitlemata: Klient registreerib huvi üks kord. Edasi ei saadeta midagi enne, kui server avaldab sobiva sündmuse, mis on palju odavam kui korduv küsitlus.
- Üks juurväli tellimuse kohta: Spetsifikatsioon lubab ainult ühte tipptasemel välja, erinevalt päringust, mis saab korraga taotleda mitut.
- Parim hoida väikesena: Vajutage ainult neid välju, mida liides peab värskendama. Tüüpilised kasutusviisid on reaalajas vestlus, teavitused ja hinnakokkuvõtted.
Erinevus GraphQL ja REST vahel
Järgmine tabel näitab olulist erinevust GraphQL ja REST.
| GraphQL | REST |
|---|---|
| See järgib kliendipõhist arhitektuuri. | See järgib serveripõhist arhitektuuri. |
| GraphQL-i saab korraldada skeemi järgi. | REST-i saab korraldada lõpp-punktide järgi. |
| GraphQL on kasvav kogukond. | REST on väga suur kogukond. |
| GraphQL-i arenduskiirus on kiire. | REST-i arenduskiirus on aeglane. |
| GraphQL-i õppimiskõver on järsk. | REST-i õppimiskõver on mõõdukas. |
| Identiteet on eraldatud sellest, kuidas te selle hankite. | REST-is kutsutav lõpp-punkt on konkreetse objekti identiteet. |
| GraphQL-is määrab klient, milliseid välju ta vastu võtab. | Ressursi kuju ja suuruse määrab server REST-is. |
| GraphQL pakub suurt järjepidevust kõigil platvormidel. | Kõigil platvormidel on raske järjepidevust saavutada. |
GraphQL-i puudused
Siin on GraphQL-i puudused:
- Noor ökosüsteem
- Ressursipuudus taustaosas.
- Kompleksse rakenduse kujundusmuster puudub.
- Toimivusprobleemid keeruliste päringutega.
- Overkill väikeste rakenduste jaoks
- GraphQL ei sõltu HTTP vahemällu salvestamise meetoditest, mis võimaldavad päringu sisu salvestada.
- GraphQL ei saa failidest aru. Seetõttu ei sisaldu see failide üleslaadimise funktsioonis.
- GraphQL-iga olge valmis saama palju arenduseelset haridust, näiteks skeemi määratluskeele õppimine.
GraphQL-i kasutatavad avatud lähtekoodiga rakendused ja tööriistad
GraphQL-i kasutatavad olulised avatud lähtekoodiga rakendused ja tööriistad on järgmised.
- GatsbyGatsby on GraphQL-il põhinev rakendus, mis saab kasutada andmeid, mis pärinevad mitmest GraphQL API allikast. Seda saab kasutada staatilise ja kliendipõhise Reacti rakenduse arendamiseks.
- GraphiQL: See on IDE, mis integreerub brauseriga ja suhtleb ka GraphQL API-ga. Mõned GraphiQL-i funktsioonid on mutatsioonid, andmepäringud ja päringute automaatne täitmine.
- GraphQL mänguväljak: See on võimas IDE, millel on sisseehitatud redaktor mutatsioonide, valideerimise, GraphQl päringute, tellimuste jms haldamiseks. Arendaja saab seda IDE-d kasutada skeemi struktuuri visualiseerimiseks. Projekt on nüüdseks pensionil ja selle funktsioonid on tagasi GraphiQL-i koondatud.
- Prisma: Prisma on andmebaasi abstraction-kiht, mis on nüüd tüübikindla ORM-ina ja on laialdaselt seotud GraphQL-serveriga CRUD-toimingute (Create, Read, Update ja Delete) paljastamiseks.
- Natuke: See on avatud lähtekoodiga tööriist ja platvorm, mis teisendab korduvkasutatavat koodi komponentideks. Arendajad saavad neid kasutada erinevate projektide jagamiseks ja arendamiseks.

