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:

GraphQL nøglekomponenter
GraphQL nøglekomponenter

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

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

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

  1. Erstat den statiske værdi i forespørgslen med et variabelnavn.
  2. Erklær variabelnavnet som en af ​​de variabler, der accepteres af GraphQL-forespørgslen.
  3. 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.