Teknologi & innovasjonPublisert: 14. juni 202410 min lesing

GraphQL: Den fleksible APIen som revolusjonerer datahenting

Fordeler vs REST, Apollo Client/Server, schema-first design og norsk bruk av GraphQL.

Norsk Næring
Norsk NæringRedaksjon
GraphQL lar klienten spesifisere nøyaktig hvilke data den trenger, noe som reduserer over- og…

GraphQL lar klienten spesifisere nøyaktig hvilke data den trenger, noe som reduserer over- og underhenting.

Komplett guide til GraphQL: hva det er, fordeler og ulemper mot REST, Apollo Client og Server, schema-first design og bruk i norsk næringsliv.

Annonse

Hva er GraphQL?

GraphQL er et spørrespråk for APIer og en kjøretid for å utføre disse spørringene. Det ble utviklet internt hos Facebook i 2012 for å løse problemer med over- og underhenting av data i mobile applikasjoner, og åpnet som åpen kildekode i 2015.

I stedet for at serveren definerer faste endepunkter som returnerer predefinerte datastrukturer, lar GraphQL klienten spesifisere nøyaktig hvilke felt og relasjoner den trenger. En enkelt GraphQL-spørring kan hente data fra mange tabeller og tjenester i én forespørsel – noe som reduserer antall nettverksforespørsler og datastørrelse dramatisk.

GraphQL vs REST: Fordeler og ulemper

REST og GraphQL er ikke konkurrenter i svart-hvitt forstand – begge har styrker og svakheter. REST er enkelt, veldokumentert, cachebart via HTTP og er industristandard med utmerket verktøystøtte. GraphQL er mer fleksibelt, eliminerer over/underhenting og er overlegen for komplekse datahierarkier og klientdrevne applikasjoner.

For norske utviklingsteam handler valget ofte om kompleksitet og klientbehov. Enkle APIer med klare, stabile datastrukturer er gjerne best tjent med REST. Komplekse produkter med mange frontend-klienter (web, mobil, partner-APIer) som trenger ulike datasett av samme entiteter er kandidater for GraphQL.

  • GraphQL fordeler: Ingen over/underhenting, sterkt typet, selvdokumenterende, én endepunkt
  • GraphQL ulemper: Komplisert caching, N+1-problemet krever DataLoader, høyere kompleksitet
  • REST fordeler: Enkelt, HTTP-caching innebygd, bredt verktøyøkosystem, veldokumentert
  • REST ulemper: Over/underhenting, mange rundturer for relasjonelle data
  • Hybrid: Federation og BFF (Backend For Frontend) kombinerer begge

Schema-first design med SDL

GraphQL Schema Definition Language (SDL) er en deklarativ syntaks for å definere API-kontrakten din. Et GraphQL-skjema beskriver alle typer, felt, spørringer og mutasjoner ditt API tilbyr – og dette skjemaet fungerer som den eneste sannhetskilden for hva API-et kan gjøre.

Schema-first design innebærer at team enes om skjemaet før implementering begynner. Dette gjør det mulig for frontend og backend å jobbe parallelt: frontend kan mocke data fra skjemaet mens backend implementerer resolvers. Mange norske team rapporterer at dette kraftig forbedrer samarbeidet mellom frontend- og backend-utviklere.

"GraphQL med schema-first design halverte tiden vi brukte på diskusjoner om API-kontrakter. Nå kan frontend-teamet starte med én gang vi har et utkast til skjema."

— Engineering Manager, norsk produktselskap
Annonse

Apollo-økosystemet

Apollo er de facto standardverktøy for GraphQL og tilbyr løsninger for hele stacken:

Apollo ClientKraftig state management og datahenting for React/Vue/Angular
Apollo ServerPopulær Node.js GraphQL-server med utmerkede plugins
Apollo FederationKombiner mange GraphQL-tjenester til ett supergraf
Apollo StudioSkjemaregister, ytelsesovervåkning og operasjonsadministrasjon
Apollo SandboxInteraktiv IDE for GraphQL-spørringer (erstatter GraphiQL)

N+1-problemet og DataLoader

N+1-problemet er GraphQLs mest kjente utfordring: hvis du henter en liste med brukere og deretter en databasespørring per bruker for å hente deres ordre, ender du opp med N+1 databasespørringer. Dette kan drepe ytelsen i produksjon.

DataLoader er standardløsningen. Det er et verktøy for batch-henting og caching som automatisk grupperer individuelle datahentinger til batch-spørringer. Med DataLoader implementert korrekt reduseres N+1 til én batch-spørring. For norske utviklere er dette et must-know konsept før GraphQL tas i produksjon.

GraphQL i norsk næringsliv

GraphQL er bredt adoptert blant norske teknologiselskaper, spesielt de med komplekse datamodeller og mange frontend-klienter. Bedrifter innen e-handel, fintech, media og SaaS har tatt GraphQL i bruk for å gi frontend-teamene mer autonomi og for å redusere API-vedlikeholdskostnader.

Schibsted, Vipps og en rekke norske scale-ups bruker GraphQL i produksjon. Norske konsulentselskaper har bygget opp solid kompetanse på GraphQL og tilbyr rådgivning og implementeringstjenester. Det norske GraphQL-fellesskapet arrangerer meetups og har aktive diskusjonskanaler på nett.

Kom i gang med GraphQL

For nybegynnere er How to GraphQL (howtographql.com) et utmerket gratis kurs som dekker både frontend og backend fra grunnen av. Apollo-dokumentasjonen er meget grundig for de som ønsker å dykke inn i Apollo-spesifikke løsninger.

Start med et enkelt prosjekt: sett opp Apollo Server med en liten skjema og noen hardkodede resolvers, deretter integrer mot en database. Bruk Apollo Sandbox for å utforske og teste spørringene dine visuelt. Steg for steg vil GraphQL-konseptene falle på plass gjennom praktisk erfaring.

Annonse

Ofte stilte spørsmål

Hva handler «GraphQL: Den fleksible APIen som revolusjonerer datahenting» om?

Komplett guide til GraphQL: hva det er, fordeler og ulemper mot REST, Apollo Client og Server, schema-first design og bruk i norsk næringsliv.

Hva er GraphQL?

GraphQL er et spørrespråk for APIer og en kjøretid for å utføre disse spørringene. Det ble utviklet internt hos Facebook i 2012 for å løse problemer med over- og underhenting av data i mobile applikasjoner, og åpnet som åpen kildekode i 2015.

Hva bør du vite om graphQL vs REST: Fordeler og ulemper?

REST og GraphQL er ikke konkurrenter i svart-hvitt forstand – begge har styrker og svakheter. REST er enkelt, veldokumentert, cachebart via HTTP og er industristandard med utmerket verktøystøtte. GraphQL er mer fleksibelt, eliminerer over/underhenting og er overlegen for komplekse datahierarkier og klientdrevne applikasjoner.

Hva bør du vite om schema-first design med SDL?

GraphQL Schema Definition Language (SDL) er en deklarativ syntaks for å definere API-kontrakten din. Et GraphQL-skjema beskriver alle typer, felt, spørringer og mutasjoner ditt API tilbyr – og dette skjemaet fungerer som den eneste sannhetskilden for hva API-et kan gjøre.

Hva bør du vite om apollo-økosystemet?

Apollo er de facto standardverktøy for GraphQL og tilbyr løsninger for hele stacken:

Hva bør du vite om n+1-problemet og DataLoader?

N+1-problemet er GraphQLs mest kjente utfordring: hvis du henter en liste med brukere og deretter en databasespørring per bruker for å hente deres ordre, ender du opp med N+1 databasespørringer. Dette kan drepe ytelsen i produksjon.

Norsk Næring
Skrevet avNorsk NæringRedaksjon

Norsk Næring er en del av redaksjonen i Norsk Næring og dekker teknologi & innovasjon. Redaksjonen kvalitetssikrer alt innhold mot oppdaterte og pålitelige kilder.

Redaksjonell merknad: Dette innholdet er utarbeidet av Norsk Næring med hjelp av kunstig intelligens og kvalitetssikret av redaksjonen. Informasjonen er ment som generell veiledning og erstatter ikke profesjonell rådgivning. Feil eller unøyaktigheter? Kontakt oss på help@norsknæring.no.