GraphQL-handledning för nybörjare: Vad är, funktioner och exempel
Vad är GraphQL?
GraphQL är en applikationslager-server-side-teknologi som utvecklats av Facebook för att utföra frågor med befintliga data. GraphQL kan optimera RESTful API-anrop. Det ger ett deklarativt sätt att hämta och uppdatera dina data. GraphQL hjälper dig att ladda data från server till klient. Det gör det möjligt för programmerare att välja vilka typer av förfrågningar de vill göra.
Varför använda GraphQL?
Följande är anledningarna till att använda GraphQL:
- Det ger en läsbar fråga.
- I GraphQL är det väldigt lätt att hantera många databaser.
- Den är lämplig för mikrotjänster och komplexa system.
- Du kan hämta data med ett enda API-anrop.
- Det hjälper dig med frågebatchning och cachning.
- Du möter inte, över och under hämtningsproblem.
- Skräddarsy önskemål efter dina behov.
- Det hjälper dig att upptäcka schemat i lämpligt format.
- GraphQL håller automatiskt dokumentationen synkroniserad med API-ändringar.
- API-utveckling är möjlig utan versionshantering.
- GraphQL-fält används i flera frågor som kan delas till en högre komponentnivå för återanvändning.
- Du kan välja vilka funktioner som ska exponeras och hur de fungerar.
- Den kan användas för snabb applikationsprototyping.
Tillämpningar av GraphQL
Här är de viktiga tillämpningarna av GraphQL:
- Det tillhandahåller Relay och andra klientramar
- GraphQL hjälper dig att förbättra prestandan för mobilappen.
- Det kan minska överhämtningsproblem för att sänka molntjänsten på serversidan och minska nätverksanvändningen på klientsidan.
- Den kan användas när klientapplikationen ska ange vilka fält som behövs i långa frågeformat.
- GraphQL kan utnyttjas fullt ut när du måste lägga till funktionalitet till ditt gamla eller befintliga API.
- Det används när du ska förenkla komplexa API.
- Blanda och mosa fasadmönster, som ofta används i objektorienterad programmering.
- När du måste samla data från mer än en plats till ett bekvämt API.
- Du kan använda GraphQL som en abstraktion på ett befintligt API för att specificera svarsstruktur baserat på användarbehov.
Vad behöver du lära dig innan du lär dig GraphQl?
Denna GraphQL-handledning är baserad på uttrycka och NodeJs. Därför kan du lära dig GraphQL mycket enkelt med en grundläggande förståelse för NodeJS.
GraphQL nyckelkomponenter
Nu i denna GraphQL-handledning, låt oss lära oss nyckelkomponenterna i GraphQL:
Som visas i figuren ovan finns det tre nyckelkomponenter i GraphQL: 1) Fråga, 2) Resolver och 3) Schema.
Fråga
Frågan är en API-begäran som görs av klientdatorapplikationen. Den stöder förstärkningar och pekar på arrayer. Fråga används för att läsa eller hämta värden.
Delar av frågan:
Följande är de viktiga delarna av Query
- Fält:
Ett fält indikerar helt enkelt att vi ber servern om viss information. Följande är ett GraphQL-exempel på ett fält i en graphQL-fråga.
query { team { id name } } "data": { "team":[ { "id": 1, "name": "Avengers" } , … ] } }
I ovanstående GraphQL-exempel ber vi servern om fältet som heter team och dess underfält som id och namn. GraphQL-servern returnerar data i vi bad om.
- Argument
In REST, kan vi bara skicka en enda uppsättning argument som URL-segment och frågeparametrar. För att få en viss profil ser ett typiskt REST-samtal ut så här:
GET /api'team?id=2 Content-Type: application JSON { "id": 2, "name": "Justice League." }
lösa
Resolvers ger anvisningarna för att konvertera GraphQL-drift till data. De löser frågan till data genom att definiera resolverfunktioner.
Den visar servern processen samt platsen för att hämta data enligt ett specifikt fält. Resolvern separerar även databasschema och API-schema. Den separerade informationen hjälper till att modifiera innehållet som erhålls från databasen.
Schema
Ett GraphQL-schema är centrum för GraphQL-implementeringen. Den beskriver den funktionalitet som är tillgänglig för de klienter som ansluter till den.
Funktioner i GraphQL
Här är viktiga funktioner i GraphQL:
- Det tillhandahåller deklarativt frågespråk, vilket inte är absolut nödvändigt.
- Den är hierarkisk och produktcentrerad.
- GraphQL är starkt skrivet. Det betyder att frågor exekveras inom ramen för ett visst system.
- Frågor i GraphQL kodas i klienten, inte i servern.
- Den har alla funktioner i applikationslagret i OSI-modellen.
GraphQL-klienter
GraphQL-klient är en kod som gör POST-förfrågningar till en relevant GraphQL-server. Du kan fråga ett GraphQL API direkt, men det goda tillvägagångssättet är att utnyttja ett dedikerat klientbibliotek med hjälp av Relay.
Denna JavaSkriptbiblioteket är utvecklat av Facebook för att göra React-applikationer med GraphQL. GraphQL-klienter kan vara ett CMS som Drupal, en ensidig applikation, en mobilapplikation, etc.
GraphQL-servrar
GraphQL-servrar är serversidans implementering av GraphQL:s specifikation. Den visar dina data som GraphQL API, som ditt klientprogram kan fråga efter databas.
GraphQL Gateways
Gateway är ett mikrotjänstmönster där du kan bygga en separat tjänst för att klara av andra backend-tjänster. Den erbjuder fungerande dokumentation och ger ett bekvämt sätt att samla in data från mer än en källa med en enda begäran.
Vad är variabeln i GraphQL?
A Variabel i GraphQL används för att separera de dynamiska värdena från klientfrågan och skicka frågan som en unik ordbok. Variabel i GraphQL kan också användas för att återanvända frågan eller mutationer skrivna av klienten med individuella argument. I graphQL kan du inte skicka dynamiska argument direkt i frågesträngen. Anledningen är att kod på klientsidan behöver manipulera frågesträngen dynamiskt vid den tidpunkt då du kör programmet.
GraphQL har ett bra sätt att faktorisera de dynamiska värdena ur frågan. Den skickar dem som en separat ordbok. Dessa värden är kända som variabler. När vi arbetar med variabler måste vi göra följande tre saker:
- Ersätt det statiska värdet i frågan med ett variabelnamn.
- Deklarera variabelnamnet som en av variablerna som accepteras av GraphQL-frågan.
- Skicka värdet i den transportspecifika ordboken över variabler.
Så här ser det ut tillsammans:
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 ovanstående GraphQL-exempel har vi helt enkelt skickat en annan variabel än att behöva konstruera en ny fråga.
Vad är mutation?
En mutation är ett sätt att ändra datasetet i GraphQL. Den modifierar data i datalagret och returnerar ett värde. Mutationer hjälper dig att infoga, uppdatera eller radera data. Generellt definieras mutationer som en schemadel.
Punkter att tänka på när du designar GraphQL-mutationer
Här är de viktiga punkterna när du designar GraphQL:
- Namngivning: Först och främst måste du namnge ditt mutationsverb. Sedan substantivet, eller "objekt" om tillämpligt. Använd camelCase när du namnger mutationer.
- Specificitet: Du måste göra mutationsspecifik så mycket som möjligt. Mutationer bör representera semantiska åtgärder som användaren har vidtagit.
- Inmatningsobjekt: Använd en unik, nödvändig, indataobjekttyp som ett argument för att utföra mutation på klienten.
- Unik nyttolasttyp: Du bör använda en unik nyttolasttyp för varje mutation. Du kan också lägga till mutationsutgången som ett fält till den specifika nyttolasttypen.
- Häckande: Använd kapsling till din mutation varhelst det är vettigt. Det låter dig utnyttja GraphQL API fullt ut.
Skillnaden mellan GraphQL och REST
Följande tabell visar viktig skillnad mellan GraphQL och REST.
GraphQL | REST |
---|---|
Den följer klientdriven arkitektur. | Den följer serverdriven arkitektur. |
GraphQL kan organiseras i termer av ett schema. | REST kan organiseras i termer av endpoints. |
GraphQL är en växande community. | REST är ett mycket stort samhälle. |
Utvecklingshastigheten i GraphQL är snabb. | Utvecklingshastigheten i REST är långsam. |
Inlärningskurvan i GraphQL är svår. | Inlärningskurvan i REST är måttlig. |
Identiteten är skild från hur du hämtar den. | Slutpunkten du anropar i REST är identiteten för ett visst objekt. |
I GraphQL bestämmer servern tillgängliga resurser. | Formen och storleken på resursen bestäms av servern i REST. |
GraphQL ger hög konsistens över alla plattformar. | Det är svårt att få konsekvens på alla plattformar. |
Nackdelar med GraphQL
Här är GraphQL-nackdelarna:
- Ungt ekosystem
- Brist på resurser på backend-delen.
- Saknar designmönster för en komplex app.
- Prestandaproblem med komplexa frågor.
- Overkill för små applikationer
- GraphQL är inte beroende av HTTP-cachemetoderna som möjliggör lagring av begäraninnehåll.
- GraphQL förstår inte filer. Därför ingår inte en filuppladdningsfunktion i den.
- Med GraphQL, var beredd på att ha mycket utbildning före utveckling som att lära sig Schema Definition Language.
Appar och verktyg med öppen källkod som används av GraphQL
De viktiga appar och verktyg med öppen källkod som används av GraphQL är följande:
- Gatsby: Gastby är en applikation som drivs av GraphQL som kan använda data som härrör från mer än en GraphQL API-källa. Du kan använda den för att utveckla en statisk och klientbaserad React-applikation.
- GraphiQL: Det är ett ID som integreras med webbläsaren och som även interagerar med API:t för GraphQL. Några av funktionerna som GraphiQL inkluderar är mutationer, dataförfrågningar och autokompletterande frågor.
- GraphQL lekplats: Det är en kraftfull IDE som har en inbyggd editor för att hantera mutationer, validering, GraphQl-frågor, prenumerationer, etc. Utvecklaren kan använda denna IDE för att visualisera schemats struktur.
- prisma: Prisma är ett databasabstraktionslager som förvandlar dina databaser till GraphQL API:er med CRUD-operationer (Create, Read, Update and Delete).
- Bit: Det är ett verktyg och plattform med öppen källkod som konverterar återanvändbar kod till komponenter. Utvecklare kan använda dem för att dela och utveckla olika projekt.
Sammanfattning
- GraphQL är en applikationslager-server-side-teknologi som utvecklats av Facebook för att utföra frågor med befintliga data.
- Du kan använda GraphQL för att hämta data med ett enda API-anrop.
- GraphQL hjälper dig att förbättra prestandan för mobilappen.
- Viktiga GraphQL-frågekomponenter är: 1) Fråga, 2) Resolver, 3) Schema.
- GraphQL är starkt skrivet. Det betyder att frågor exekveras inom ramen för ett visst system.
- GraphQL-klient är en kod som gör POST-förfrågningar till en relevant GraphQL-server.
- GraphQL-servrar är serversidans implementering av GraphQL:s specifikation.
- Gateway är ett mikrotjänstmönster där du kan bygga en separat tjänst för att klara av andra backend-tjänster.
- GraphQL har ett bra sätt att faktorisera de dynamiska värdena ur frågan.
- En mutation är ett sätt att ändra datasetet i GraphQL.
- De viktiga punkterna när du designar GraphQL är: 1) Namngivning, 2) Specificitet, 3) Indataobjekt Unik nyttolasttyp och 4) Nesting.
- GraphQL kan organiseras i termer av ett schema, medan REST kan organiseras i termer av endpoints.
- Nackdelen med GraphQL är att den saknar resurser på backend-delen.