GraphQL:n perusteet React-kehittäjille
Ymmärtäkää GraphQL-kyselyt, mutaatiot, tilaukset ja skeemat frontend-kehittäjän näkökulmasta
GraphQL:n perusteet React-kehittäjille on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.
GraphQL ja REST
REST tarjoaa kiinteän rakenteen päätepisteitä: GET /users/:id palauttaa koko käyttäjäolion riippumatta siitä, mitä asiakas tarvitsee. GraphQLin avulla asiakas voi määrittää täsmälleen haluamansa kentät, mikä poistaa ylihaun (liikaa tietoa) ja alihakemisen (liian vähän tietoa, mikä edellyttää useita pyyntöjä).
Yhdellä GraphQL-kyselyllä voidaan hakea käyttäjä, hänen julkaisunsa ja jokaisen julkaisun tekijä yhdellä edestakaisella pyynnöllä.
GraphQL-skeema
Jokainen GraphQL-rajapinta määritellään Schema Definition Language (SDL) -kielellä kirjoitetulla skeemalla. Skeema ilmoittaa tyypit ja niiden kentät sekä juurityypit Query, Mutation ja Subscription, joita asiakkaat voivat käyttää.
Skeema on asiakkaan ja palvelimen välinen sopimus. Käyttöliittymä- ja taustajärjestelmätiimit voivat työskennellä rinnakkain, kun skeemasta on sovittu.
GraphQL-kyselyn kirjoittaminen
GraphQL-kysely valitsee kenttiä: { user(id: "1") { name email posts { title } } }. Sisäkkäiset kentät kulkevat suhteita pitkin yhden pyynnön aikana. Aliakset nimeävät kenttiä uudelleen: { me: user(id: "1") { name } }. Fragmenttien avulla kenttävalintoja voidaan käyttää uudelleen useissa kyselyissä.
Muuttujat tekevät kyselyistä uudelleenkäytettäviä: query GetUser($id: ID!) { user(id: $id) { name } } muuttujilla: { id: "1" }.
Resolverit palvelimella
Jokaisella GraphQL-skeeman kentällä on palvelimella resolver-funktio. Kun asiakas kysyy user.name-kenttää, user-resolver hakee käyttäjäolion ja name-resolver (tai oletusresolver) palauttaa name-kentän.
Tämä kenttätason ratkaisu mahdollistaa sen, että GraphQL hakee täsmälleen vain pyydetyt tiedot.
N+1-ongelma
Jos kysely hakee 100 julkaisun luettelon ja jokainen julkaisu sisältää tekijänsä, naiivi toteutus tekee tekijöistä 100 erillistä tietokantakyselyä. Tämä N+1-ongelma hidastaa GraphQL-rajapintoja ilman optimointia.
DataLoader ratkaisee N+1-ongelman niputtamalla kaikki tekijöiden haut yhdeksi tietokantakyselyksi käyttämällä pyyntökohtaista välimuistia ja niputusfunktiota.
GraphQL Playground ja Apollo Studio
Apollo Studio ja GraphQL Playground ovat selainpohjaisia käyttöliittymiä GraphQL-rajapinnan interaktiiviseen tutkimiseen. Ne täydentävät kentät automaattisesti skeeman perusteella, näyttävät kyselyjen tulokset ja esittävät tyyppien dokumentaation suoraan käyttöliittymässä.
Playgroundin käyttäminen on nopein tapa ymmärtää ennestään tuntematon GraphQL-rajapinta ennen asiakaskoodin kirjoittamista.
Tyyppien introspektio
GraphQL-rajapinnat tarjoavat oman skeemansa introspektiokyselyn kautta: { __schema { types { name } } }. Asiakkaat voivat kysellä itse skeemaa selvittääkseen käytettävissä olevat tyypit, kentät ja argumentit.
graphql-codegenin kaltaiset koodigeneraattorityökalut käyttävät introspektiota luodakseen automaattisesti API-skeemaa vastaavat TypeScript-tyypit.
Mutaatiot ja tilaukset
GraphQL-mutaatiot muokkaavat tietoja: mutation CreatePost($input: PostInput!) { createPost(input: $input) { id title } }. Tilaukset muodostavat pysyvän yhteyden (yleensä WebSocket-yhteyden) ja välittävät päivityksiä: subscription { postAdded { id title } }.
Kaikki kolme juurityyppiä (Query, Mutation, Subscription) käyttävät samaa kenttien valinnan syntaksia.
Milloin GraphQL on parhaimmillaan verrattuna RESTiin
GraphQL soveltuu erinomaisesti sovelluksiin, joissa on monimutkaisia ja sisäkkäisiä tietotarpeita, useita asiakastyyppejä (mobiili, verkko, TV), jotka tarvitsevat eri osajoukkoja kentistä, tai nopeasti kehittyviä rajapintoja, joissa kenttien käytöstä poistaminen on endpointien versiointia suositeltavampaa.
REST on yksinkertaisempi CRUD-rajapinnoille, joiden resurssirakenteet ovat ennakoitavia ja tasaisia ja jotka hyödyntävät HTTP-välimuistia tehokkaasti ETag-tunnisteiden ja välimuistiotsakkeiden avulla.
GraphQL-asiakkaat: Apollo, URQL ja React Query
Apollo Client on monipuolisin GraphQL-asiakas: se tarjoaa normalisoidun välimuistin, paikallisen tilan hallinnan, tilaukset ja virheenkäsittelylinkit. URQL on kevyempi, ja siinä on dokumenttivälimuisti sekä yksinkertaisempi rajapinta. graphql-requestin kanssa käytetty React Query on yksinkertaisin vaihtoehto peruskyselyihin ja -mutaatioihin ilman kehittynyttä välimuistinhallintaa.
Valitkaa ratkaisu välimuistivaatimusten perusteella: käyttäkää normalisoitua välimuistia useissa kyselyissä jaettaville entiteeteille (Apollo) ja yksinkertaisempaa dokumenttivälimuistia toisistaan riippumattomille kyselyille (URQL tai React Query).
SDL-esimerkki
Yksinkertainen SDL-esimerkki: type User { id: ID! name: String! posts: [Post!]! } type Post { id: ID! title: String! author: User! } type Query { user(id: ID!): User users: [User!]! }. Huutomerkit ilmaisevat, että kentät eivät voi olla null-arvoja.
Tämä skeema kertoo asiakkaalle täsmälleen, mitä kenttiä kullakin tyypillä on ja mitä kyselyjä on käytettävissä, mikä mahdollistaa tyyppiturvallisen koodin generoinnin.
GraphQL: over-fetching ja under-fetching
Mitä "over-fetching" tarkoittaa RESTin ja GraphQL:n yhteydessä?
Oppitunnin kertaus
GraphQLin avulla asiakkaat voivat pyytää täsmälleen tarvitsemansa kentät ilman liika- tai vajaanoutoa käyttämällä skeeman määrittämää kyselykieltä. Resolverit vastaavat kustakin kentästä, ja DataLoader ratkaisee N+1-ongelman. Introspektio mahdollistaa TypeScript-tyyppien generoinnin. Apollo Client, URQL ja React Query ovat tärkeimmät React-yhteensopivat GraphQL-asiakkaat.
Valitkaa GraphQL monimutkaisiin, sisäkkäisiin ja useiden asiakkaiden tietotarpeisiin ja REST yksinkertaiseen CRUD-käyttöön, jossa resurssirakenteet ovat ennakoitavia.
Opi React tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 88
- Oppitunnit
- 324
Usein kysytyt kysymykset
Onko oppitunti ”GraphQL:n perusteet React-kehittäjille” ilmainen?
Kyllä – oppitunnin ”GraphQL:n perusteet React-kehittäjille” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”GraphQL:n perusteet React-kehittäjille”?
Ymmärtäkää GraphQL-kyselyt, mutaatiot, tilaukset ja skeemat frontend-kehittäjän näkökulmasta Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”GraphQL:n perusteet React-kehittäjille”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?
Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- GraphQL:n perusteet React-kehittäjille
- Apollo Clientin käyttöönotto Reactissa
- useQuery- ja useMutation-hookit
- Apollo-välimuisti: normalisointi ja päivitykset