GraphQL: Et alternativ til REST på HTTP

GraphQL: Et alternativ til REST på HTTP

Der findes mange open source-arkitektoniske standarder til at bygge og distribuere applikationer. REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) og GraphQL API'er er de mest populære.





RESTful API'er er den mest brugte API-arkitektoniske standard. Hvis du har skrevet komplekse RESTful API'er med mange endepunkter, har du sandsynligvis indset, hvor komplicerede de kan være. Dette gælder især, hvis der kun er små forskelle mellem endepunkterne.





MAKEUSE AF DAGENS VIDEO

Du kan også støde på problemer med datahentning, da RESTful API'er ikke er fleksible nok til at vælge specifikke data. GraphQL løser disse problemer med RESTful API'er.





Hvad er GraphQL?

GraphQL (Graph Query Language) er et forespørgselssprog og runtime til opbygning af API'er. I modsætning til REST API'er med mange endepunkter til forbrug af data, har GraphQL API'er ét indgangspunkt. Du kan hente specifikke data ved at beskrive dem i forespørgsler.

Det GraphQL-specifikation definerer forespørgselssproget og hvordan GraphQL-servere fungerer. Du kan bygge og forbruge GraphQL API'er i server-side sprog fra Python til Javascript , og ethvert sprog, der understøtter HTTP.



hvordan man laver en bootbar cd windows 10

Meta byggede GraphQL i 2012 som et alternativ til REST til at bygge på HTTP. De udgav GraphQL som en open source-standard i 2015. I dag overvåger GraphQL-fonden udviklingen af ​​GraphQL-specifikationen.

GraphQL er ret ny med lav anvendelse, og der er skjulte omkostninger ved at bruge det. Opbygning af GraphQL API'er kan være unødvendigt komplekst, især for små projekter med få endepunkter.





Desuden returnerer alle GraphQL-anmodninger til sidst en statuskode på 200 uanset anmodningens tilstand.

Hvordan virker GraphQL?

  GraphQL's functions and syntax

I modsætning til REST, som er ressourceorienteret , GraphQL kræver, at du tænker på data som en graf for at interagere med data. Du kan angive strukturen af ​​dataene, og specifikationen giver en robust forespørgselsgrænseflade til at interagere med API'et over HTTP. Du vil være i stand til at bruge forskellige funktioner afhængigt af GraphQL-pakke eller bibliotek du vælger at bruge.





GraphQL-skemaer inkluderer objekttyper, der definerer objektet, der kan anmodes om, og dets tilgængelige felter. På API-forespørgsler og mutationer validerer GraphQL-pakken forespørgsler og udfører forespørgslerne baseret på de angivne handlerfunktioner (resolvere).

Hvorfor skal du bruge GraphQL?

REST er en brugervenlig standard, og de fleste programmeringssprog har værktøjer til hurtig opbygning af RESTful API'er. Der er dog mange problemer med at bygge og forbruge RESTful API'er.

Her er nogle af problemerne med REST, der får udviklere til at foretrække GraphQL til nogle brugssager.

Ineffektiv datahentning

RESTful API'er videresender data baseret på endepunktets specifikation. De er ikke fleksible nok til at hente data ud over det, der er hårdkodet i endepunktets behandlerfunktion.

Antag, at et slutpunkt returnerer en liste over data under opkald, og at du skal angive værdier eller kriterier for felter. I så fald skal udvikleren oprette et slutpunkt og definere forretningslogikken for at returnere dataene. Du kan parse den værdifulde ressource manuelt, hvilket i sidste ende tager længere tid.

GraphQL løser problemet med ineffektiv datahentning, da du kan forespørge API'er for at returnere data baseret på kriterier og specifikationer fleksibelt.

GraphQL API'er er interaktive; du kan angive de data, du har brug for at hente i en let, læsbar syntaks.

{ 
user(where: {age: {_eq: "89"}}) {
name
school(where: {alive: {_eq: true}}) {
bio
nationality
}
}
}

GraphQL-forespørgslen ovenfor forespørger en bruger skema for poster, hvor alder feltet er 89. Forespørgslen har en indlejret forespørgsel for poster, hvor i live felt vurderer rigtigt . Det returnerer felterne navn, bio og nationalitet fra skemaet.

Hurtig udvikling

Det er nemmere at bygge og forbruge GraphQL API'er end at bruge REST, især da projektstørrelsen øges. I udviklingsfasen behøver du ikke udvikle så mange ruter og handlerfunktioner, som du vil, når du udvikler RESTful API'er. At forbruge GraphQL API'er er ikke så kedeligt som RESTful API'er.

I REST giver forskellige endepunkter adgang til forskellige ressourcer, i modsætning til GraphQL, hvor der er et enkelt endepunkt. Dette giver fleksibilitet og ydeevne, og forespørgsler kan kalde forskellige resolverfunktioner.

GraphQL Schema Definition Language

GraphQL Schema Definition Language (SDL) specificerer skemaerne for GraphQL-tjenester.

GraphQL SDL-syntaksen er let at læse og forstå. Du angiver strukturen af ​​dit skema i en fil med .graphql eller .graphqls udvidelse.

type Human { 
name: String!
age: Int!
}

input AddHuman {
name: String!
age: Int!
}

type Mutation {
CreateHuman(input: AddHuman!): Human!
DeleteHuman(id: Int!): String!
UpdateHuman(id: Int!): String!
}

type Query {
GetHuman(id: Int!): Human!
GetHumans: [Human!]!
}

GraphQL-koden ovenfor er skemaet for en GraphQL API, der definerer strukturen af ​​API'et for anmodninger. Skemaet definerer CRUD-funktionalitet for API'en.

På klientsiden kan klienten, baseret på skemaets struktur og klientens data eller drift, udføre en forespørgsel (GET eller SLET i REST) ​​eller en mutation (PUT eller POST).

Her er et eksempel på forespørgsel Human skema.

query Human { 
name
age
}

Forespørgslen ovenfor ville returnere det menneskelige skema navn og alder feltdata.

GraphQL-mutationer har en ret anderledes syntaks i modsætning til forespørgsler. Her er et eksempel på en mutationsoperation på Human skema.

mutation { 
CreateHuman(input:{ name:"man", age:1000000000000000,}) {
name
age
}
}

Mutationskoden indtastes navn og alder felter til klienten og returnerer data fra felterne.

Du skal bruge et datalager for vedholdenhed, når du bygger din GraphQL API. Ligesom REST og de fleste HTTP-baserede webarkitekturer er GraphQL statsløs, og du kan bruge enhver datalager eller database til din app.

Opbygning af en GraphQL API

  GraphQL-understøttede sprog

GraphQL er en specifikation, og du kan bygge GraphQL på de mest populære server-side sprog. Du bliver nødt til at finde et bibliotek med de funktioner, du har brug for til dit projekt.

Når du vælger et GraphQL-bibliotek, vil du bruge et funktionsrigt bibliotek, der understøtter alle GraphQL-typer og -operationer. De fleste biblioteker tager enten en skema-først eller en kode-først tilgang. I førstnævnte definerer du et GraphQL-skema, og biblioteket genererer resolvere og boilerplate-kode. For sidstnævnte hardkoder du resolverne uden at definere et skema.

GraphQL er ved at blive adopteret

Siden starten af ​​GraphQL har udviklere og virksomheder udgivet værktøjer til at forenkle brugen. Disse kan reducere udviklingstiden for mindre og mellemstore projekter.

Du kan tjekke open source GraphQL-klienter, GraphQL-dokumentationen og dens specifikation for at lære mere.