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.

  • 🧠 Määratlus: GraphQL on rakenduskihi tehnoloogia, mis teostab deklaratiivseid päringuid olemasolevate andmete suhtes.
  • 🧩 Põhikomponendid: Päring taotleb andmeid, lahendaja hangib need ja skeem määratleb, mida küsida võidakse.
  • 🎯 Üksikkõne: Üks päring tagastab kõik nõutavad väljad, mis kõrvaldab üle- ja alatoomise.
  • 🔤 Muutujad: Dünaamilised väärtused deklareeritakse eraldi ja edastatakse sõnastikuna, mitte päringustringi sisse ehitatuna.
  • ✏️ Mutatsioonid: Mutatsioon lisab, uuendab või kustutab andmeid ja tagastab muudetud väärtuse.
  • 📡 Tellimused: Tellimus hoiab ühenduse avatuna, nii et server saadab värskendusi kohe, kui need ilmuvad.
  • 🇧🇷 RESTi vastu: GraphQL on kliendipõhine ja skeemipõhine, samas kui REST on serveripõhine ja lõpp-punktipõhine.

GraphQL õpetus algajatele

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:

GraphQL põhikomponendid
GraphQL põhikomponendid

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

  1. 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.

  1. 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:

  1. Asendage päringu staatiline väärtus muutuja nimega.
  2. Deklareerige muutuja nimi üheks muutujaks, mille GraphQL päring aktsepteerib.
  3. 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.

KKK

Ei. GraphQL on päringukeel API-dele, mitte andmebaasidele. See asub teie juba kasutatava salvestusruumi ees ja resolverid tõlgivad iga välja SQL-iks, REST-päringuks või mis tahes muuks allikaks.

Enamik päringuid tagastab HTTP 200 olenemata tulemusest. Vead kuvatakse andmevälja kõrval asuvas ülataseme veateadete massiivis, seega peavad kliendid kontrollima päringu sisu, mitte ainult olekukoodile lootma.

Pesastatud väli saab käivitada ühe andmebaasikõne iga ülemkirje kohta, seega kümme meeskonda põhjustavad üksteist päringut. Pakettteegid, näiteks DataLoader, grupeerivad need kõned üheks päringuks ja kõrvaldavad kitsaskoha.

Jah. Esitage tabeli definitsioonid või näidis-JSON ja tehisintellekti assistent loob tüübid, väljad ja seosed skeemidefinitsioonikeeles (Schema Definition Language). RevEnne tootmiskeskkonnas kasutamist kontrollige nullitavust ja lehekülgimist.

Jah. Andke sellele lõpp-punkt ja näidisvastus ning tehisintellekti assistent tagastab samaväärse päringu koos lahendaja ülevaatega. Võrrelge mõlemat vastust väljade kaupa enne REST-päringu asendamist.

Võta see postitus kokku järgmiselt: