GraphQL är i grunden ett frågespråk för att hämta och ändra data på en server, och för att prenumerera på ändringar. I stället för att göra flera olika API-anrop, som i REST, så ställs en fråga efter alla data som behövs.
Typiskt användning är där en webbläsare först hämtar och fyller i en webbsida med användaranpassad information, sedan sänder tillbaka ändringar utifrån användarens inmatning och sedan fortlöpande mottar rapporterar från servern när relevant information ändrats. Främsta unika egenskap är frågespråket som kan efterfråga hierarkiska data med relationer och få dessa i urval levererade i samma struktur som de efterfrågas.
Vem ligger bakom GraphQL?
GraphQL utvecklades först av Facebook 2012 och publicerades 2015 som open source. Utveckling sker fortlöpande, t ex lades scheman till i januari 2018.
Vad är GraphQL inte?
GraphQL är inte en enskild implementation av eller för klienter eller servrar: Det finns däremot flera implementationer av GraphQL för flera språk och plattformar. GraphQL är inte ett programmeringsspråk: Det innehåller däremot ett frågespråk, ett schemadefinierande språk och ett typdefinierande/datamodellerande språk.
GraphQL vs REST
Då REST är en välkänd arkitektur för webbtjänster är det givande att beskriva GraphQL visavi REST. GraphQL utvecklades av Facebook för att REST var otillräckligt för deras behov. De största skillnaderna har tonvikten på flexibilitet och effektiv resursanvändning. Det är också stor skillnad på var och när den största utvecklingsinsatsen behöver göras. Både REST och GraphQL kan användas i andra tillämpningar än webb, men båda har utvecklats primärt för det ändamålet.
När och för vem är REST bäst?
Att kombinera de två
Ett större integrationsprojekt eller en webbtjänst kan förstås passa in på flera av ovanstående beskrivningar, så en kombination av GraphQL och REST kan vara den bästa övergripande API-lösningen.
Att migrera mellan de två
En framgångsrik migrering från REST till GraphQL kräver en del förarbete i studier av statistik från anrop och belastning på befintligt API. Vilka användningsfall sorterar under "När och för vem är XXX bäst?" ovan, t ex? Typiska mål är att få ner antalet anrop och komplexitet i bearbetning på klienten. En effektiv cachningslösning på klienten kan kräva identifiering av återanvändbara objekt och strukturer, och en anpassning till detta i både datamodell och frågor.
En framgångsrik migrering från GraphQL till REST skulle kunna göras ifall en användningsstudie kommer fram till att klientens behov egentligen bara sorterar under "När och för vem är REST bäst?" ovan. Men eftersom en GraphQL-lösning har högsta kostnaden i början på utvecklingen verkar ändå en sådan migrering svårmotiverad.
Att dokumentera GraphQL
Med introduktionen av GraphQL Schema Definition Language (SDL) kan API:et visualiseras och överblickas enklare. Det finns flera verktyg för att grafiskt visualisera dessa, även interaktiva:
graphqlviz
Frågespråket har även stöd för att efterfråga schemat.
Analys och statistik
För insamling och analys av annat än grundläggande information såsom antalet anrop, anropsfrekvens per klient, datamängder överförda, allmän serverbelastning och så vidare krävs att servern som implementerar GraphQL har särskilt stöd för detaljerad analys och statistik, liknande den för databasservrar.
Implementationer för klienter
Apollo Client: En produktionsfärdig GraphQL-klient främst för React, men även för JavaScript, iOS och
Android. MIT Licens.
Relay / Relay Modern: Ett javascriptbibliotek för att bygga React-applikationer baserade på GraphQL. Utvecklat och används av Facebook. Publicerat under MIT License.
React: är ett bibliotek för att bygga användargränssnitt, underliggande Apollo och Relay / Relay Modern.
Implementationer för servrar
GraphQL-bibliotek för serversidan finns för de flesta populära programmeringsspråk, såsom Java, Ruby, Python, Elexir, Scala och JavaScript (i NodeJS). MuleSofts Anypoint Exchange har stöd för GraphQL.
Resurser online
En bra och heltäckande genomgång av GraphQLs många aspekter finns på How To GraphQL.