GraphQL Tutorial for begyndere: Hvad er, funktioner og eksempel
Hvad er GraphQL?
GraphQL er en applikationslag server-side teknologi, som er udviklet af Facebook til at udfรธre forespรธrgsler med eksisterende data. GraphQL kan optimere RESTful API-kald. Det giver en deklarativ mรฅde at hente og opdatere dine data pรฅ. GraphQL hjรฆlper dig med at indlรฆse data fra server til klient. Det gรธr det muligt for programmรธrer at vรฆlge de typer anmodninger, de gerne vil fremsรฆtte.
Hvorfor bruge GraphQL?
Fรธlgende er grundene til at bruge GraphQL:
- Det giver en forespรธrgsel, der kan lรฆses af mennesker.
- I GraphQL er det meget nemt at hรฅndtere mange databaser.
- Det er velegnet til mikrotjenester og komplekse systemer.
- Du kan hente data med et enkelt API-kald.
- Det hjรฆlper dig med forespรธrgselsbatching og caching.
- Du stรฅr ikke over for, over og under henteproblemer.
- Skrรฆddersy รธnsker til dine behov.
- Det hjรฆlper dig med at finde skemaet i det passende format.
- GraphQL holder automatisk dokumentationen synkroniseret med API-รฆndringer.
- API-evolution er mulig uden versionering.
- GraphQL-felter bruges i flere forespรธrgsler, der kan deles til et hรธjere komponentniveau til genbrug.
- Du kan vรฆlge, hvilke funktioner der skal eksponeres, og hvordan de fungerer.
- Det kan bruges til hurtig applikationsprototyping.
Anvendelser af GraphQL
Her er de vigtige anvendelser af GraphQL:
- Det giver Relay og andre klientrammer
- GraphQL hjรฆlper dig med at forbedre ydeevnen af โโmobilappen.
- Det kan reducere overhentningsproblemet for at sรฆnke server-side cloud-service og reducere klientsiden, netvรฆrksbrug.
- Den kan bruges, nรฅr klientapplikationen skal angive, hvilke felter der er nรธdvendige i langt forespรธrgselsformat.
- GraphQL kan udnyttes fuldt ud, nรฅr du skal tilfรธje funktionalitet til din gamle eller eksisterende API.
- Det bruges, nรฅr du skal forenkle komplekse API.
- Bland og mos facademรธnster, som er almindeligt anvendt i objektorienteret programmering.
- Nรฅr du skal samle data fra mere end รฉt sted i รฉn praktisk API.
- Du kan bruge GraphQL som en abstraktion pรฅ en eksisterende API til at specificere svarstruktur baseret pรฅ brugerbehov.
Hvad skal du lรฆre, fรธr du lรฆrer GraphQl?
Denne GraphQL tutorial er baseret pรฅ Express og Nodejs. Derfor kan du meget nemt lรฆre GraphQL med en grundlรฆggende forstรฅelse af NodeJS.
GraphQL nรธglekomponenter
Lad os nu i denne GraphQL-tutorial lรฆre de vigtigste komponenter i GraphQL:

Som vist i ovenstรฅende figur er der tre nรธglekomponenter i GraphQL: 1) Forespรธrgsel, 2) Resolver og 3) Skema.
Query
Forespรธrgslen er en API-anmodning lavet af klientmaskinens applikation. Det understรธtter augments og peger pรฅ arrays. Forespรธrgsel bruges til at lรฆse eller hente vรฆrdier.
Dele af forespรธrgsel:
Fรธlgende er de vigtige dele af Query
- Mark:
Et felt angiver blot, at vi beder serveren om bestemte oplysninger. Fรธlgende er et GraphQL-eksempel pรฅ et felt i graphQL-forespรธrgsel.
query {
team {
id name
}
}
"data": {
"team":[ {
"id": 1,
"name": "Avengers"
}
,
โฆ
]
}
}
I ovenstรฅende GraphQL-eksempel beder vi serveren om feltet kaldet team og dets underfelter som id og navn. GraphQL-serveren returnerer data i, vi bad om.
- argumenter
In REST, kan vi kun sende et enkelt sรฆt argumenter som URL-segmenter og forespรธrgselsparametre. For at fรฅ en bestemt profil vil et typisk REST-opkald se sรฅdan ud:
GET /api'team?id=2 Content-Type: application JSON
{
"id": 2,
"name": "Justice League."
}
resolver
Resolvere giver vejledningen til at konvertere GraphQL-drift til data. De lรธser forespรธrgslen til data ved at definere resolverfunktioner.
Det viser serveren processen samt placeringen for at hente data i henhold til et specifikt felt. Resolveren adskiller ogsรฅ databaseskema og API-skema. De adskilte oplysninger hjรฆlper med at รฆndre indholdet, der er hentet fra databasen.
Planlรฆg
Et GraphQL-skema er centrum for GraphQL-implementering. Den beskriver den funktionalitet, der er tilgรฆngelig for de klienter, der opretter forbindelse til den.
Funktioner i GraphQL
Her er vigtige funktioner i GraphQL:
- Det giver deklarativt forespรธrgselssprog, hvilket ikke er bydende nรธdvendigt.
- Det er hierarkisk og produktcentreret.
- GraphQL er stรฆrkt skrevet. Det betyder, at forespรธrgsler udfรธres inden for konteksten af โโet bestemt system.
- Forespรธrgsler i GraphQL er kodet i klienten, ikke i serveren.
- Den har alle funktionerne i OSI-modellens applikationslag.
GraphQL-klienter
GraphQL-klient er en kode, der sender POST-anmodninger til en relevant GraphQL-server. Du kan forespรธrge en GraphQL API direkte, men den gode tilgang er at udnytte et dedikeret klientbibliotek ved hjรฆlp af Relay.
Denne JavaScriptbiblioteket er udviklet af Facebook til at lave React-applikationer med GraphQL. GraphQL-klienter kan vรฆre et CMS som Drupal, en enkeltsideapplikation, en mobilapplikation osv.
GraphQL-servere
GraphQL-servere er implementering pรฅ serversiden af โโGraphQL's specifikation. Den afbilder dine data som GraphQL API, som dit klientprogram kan forespรธrge efter database.
GraphQL Gateways
Gateway er et mikroservicemรธnster, hvor du kan bygge en separat service til at klare andre backend-tjenester. Det tilbyder brugbar dokumentation og giver en bekvem mรฅde at indsamle data fra mere end รฉn kilde med en enkelt anmodning.
Hvad er variablen i GraphQL?
A Variabel i GraphQL bruges til at adskille de dynamiske vรฆrdier fra klientforespรธrgslen og sende forespรธrgslen som en unik ordbog. Variable i GraphQL kan ogsรฅ bruges til at genbruge forespรธrgslen eller mutationerne skrevet af klienten med individuelle argumenter. I graphQL kan du ikke sende dynamiske argumenter direkte i forespรธrgselsstrengen. ร rsagen er, at kode pรฅ klientsiden skal manipulere forespรธrgselsstrengen dynamisk pรฅ det tidspunkt, hvor du kรธrer programmet.
GraphQL har en god mรฅde at faktorisere de dynamiske vรฆrdier ud af forespรธrgslen pรฅ. Den sender dem som en separat ordbog. Disse vรฆrdier er kendt som variabler. Nรฅr vi arbejder med variabler, skal vi gรธre fรธlgende tre ting:
- Erstat den statiske vรฆrdi i forespรธrgslen med et variabelnavn.
- Erklรฆr variabelnavnet som en af โโde variabler, der accepteres af GraphQL-forespรธrgslen.
- Send vรฆrdien i den transportspecifikke ordbog over variabler.
Sรฅdan ser det ud tilsammen:
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"
}
]
}
}
}
Som du kan se i ovenstรฅende GraphQL-eksempel, har vi simpelthen videregivet en anden variabel end at skulle konstruere en ny forespรธrgsel.
Hvad er mutation?
En mutation er en mรฅde at รฆndre datasรฆttet i GraphQL. Den รฆndrer data i datalageret og returnerer en vรฆrdi. Mutationer hjรฆlper dig med at indsรฆtte, opdatere eller slette data. Generelt er mutationer defineret som en skemadel.
Punkter at overveje, nรฅr du designer GraphQL-mutationer
Her er de vigtige punkter, mens du designer GraphQL:
- Navngivning: Fรธrst og fremmest skal du navngive dit mutationsverbum. Derefter substantivet eller "objektet", hvis det er relevant. Brug camelCase, mens du navngiver mutationer.
- Specificitet: Du skal gรธre mutationsspecifik sรฅ meget som muligt. Mutationer bรธr reprรฆsentere semantiske handlinger foretaget af brugeren.
- Input objekt: Brug en entydig, pรฅkrรฆvet input-objekttype som et argument for at udfรธre mutation pรฅ klienten.
- Unik nyttelasttype: Du bรธr bruge en unik nyttelasttype for hver mutation. Du kan ogsรฅ tilfรธje mutationsoutput som et felt til den pรฅgรฆldende nyttelasttype.
- Indlejring: Brug nesting til din mutation, hvor end det giver mening. Det giver dig mulighed for fuldt ud at udnytte GraphQL API.
Forskellen mellem GraphQL og REST
Fรธlgende tabel viser vigtig forskel mellem GraphQL og REST.
| GraphQL | REST |
|---|---|
| Det fรธlger klientdrevet arkitektur. | Det fรธlger serverdrevet arkitektur. |
| GraphQL kan organiseres i form af et skema. | REST kan organiseres i form af endepunkter. |
| GraphQL er et samfund i vรฆkst. | REST er et meget stort samfund. |
| Udviklingshastigheden i GraphQL er hurtig. | Udviklingshastigheden i REST er langsom. |
| Indlรฆringskurven i GraphQL er svรฆr. | Indlรฆringskurven i REST er moderat. |
| Identiteten er adskilt fra, hvordan du henter den. | Slutpunktet du kalder i REST er identiteten af โโet bestemt objekt. |
| I GraphQL bestemmer serveren tilgรฆngelige ressourcer. | Formen og stรธrrelsen af โโressourcen bestemmes af serveren i REST. |
| GraphQL giver hรธj konsistens pรฅ tvรฆrs af alle platforme. | Det er svรฆrt at fรฅ konsistens pรฅ tvรฆrs af alle platforme. |
Ulemper ved GraphQL
Her er GraphQL-ulemperne:
- Ungt รธkosystem
- Mangel pรฅ ressourcer pรฅ backend-delen.
- Manglende designmรธnster til en kompleks app.
- Ydeevneproblemer med komplekse forespรธrgsler.
- Overkill til smรฅ applikationer
- GraphQL afhรฆnger ikke af HTTP-cache-metoderne, der muliggรธr lagring af anmodningsindhold.
- GraphQL forstรฅr ikke filer. Derfor er en filupload-funktion ikke inkluderet i den.
- Med GraphQL skal du vรฆre forberedt pรฅ at have en masse fรธr-udviklingsuddannelse som at lรฆre Schema Definition Language.
Open Source apps og vรฆrktรธjer brugt af GraphQL
De vigtige open source apps og vรฆrktรธjer, der bruges af GraphQL, er som fรธlger:
- Gatsby: Gastby er en applikation drevet af GraphQL, der kan bruge data, som er afledt fra mere end รฉn GraphQL API-kilde. Du kan bruge det til at udvikle en statisk og klientbaseret React-applikation.
- GraphiQL: Det er et id, der integreres med browseren og ogsรฅ interagerer med API'et af GraphQL. Nogle af de funktioner, som GraphiQL inkluderer, er mutationer, dataforespรธrgsler og autofuldfรธrelsesforespรธrgsler.
- GraphQL legeplads: Det er en kraftfuld IDE, der har en indbygget editor til hรฅndtering af mutationer, validering, GraphQl-forespรธrgsler, abonnementer osv. Udvikleren kan bruge denne IDE til at visualisere strukturen af โโskemaet.
- Prisma: Prisma er et databaseabstraktionslag, som gรธr dine databaser til GraphQL API'er med CRUD-operationer (Create, Read, Update and Delete).
- Bit: Det er open source vรฆrktรธj og platform, der konverterer genbrugelig kode til komponenter. Udviklere kan bruge dem til at dele og udvikle forskellige projekter.
Resumรฉ
- GraphQL er en applikationslagsserversideteknologi, som er udviklet af Facebook til at udfรธre forespรธrgsler med eksisterende data.
- Du kan bruge GraphQL til at hente data med et enkelt API-kald.
- GraphQL hjรฆlper dig med at forbedre ydeevnen af โโmobilappen.
- Vigtige GraphQL-forespรธrgselskomponenter er: 1) Forespรธrgsel, 2) Resolver, 3) Skema.
- GraphQL er stรฆrkt skrevet. Det betyder, at forespรธrgsler udfรธres inden for konteksten af โโet bestemt system.
- GraphQL-klient er en kode, der sender POST-anmodninger til en relevant GraphQL-server.
- GraphQL-servere er implementering pรฅ serversiden af โโGraphQL's specifikation.
- Gateway er et mikroservicemรธnster, hvor du kan bygge en separat service til at klare andre backend-tjenester.
- GraphQL har en god mรฅde at faktorisere de dynamiske vรฆrdier ud af forespรธrgslen pรฅ.
- En mutation er en mรฅde at รฆndre datasรฆttet i GraphQL.
- De vigtige punkter ved design af GraphQL er: 1) Navngivning, 2) Specificitet, 3) Inputobjekt Unik nyttelasttype og 4) Nesting.
- GraphQL kan organiseres i form af et skema, hvorimod REST kan organiseres i form af endepunkter.
- Ulempen ved GraphQL er, at den mangler ressourcer pรฅ backend-delen.
