GraphQL

GraphQL er et språk tilgjengelig som åpen kildekode som er brukt til spørring og manipulering av programmeringsgrensesnitt, samt en kjøreomgivelse for å utføre spørringer mot eksisterende data.

Historie 
I 2012 ble GraphQL utviklet internt av Facebook, og i 2015 ble det gitt ut offentlig. I 2018 ble GraphQL-prosjektet overført fra Facebook til den nyetablerte GraphQL Foundation i regi av den ideelle organisasjonen Linux Foundation.

Siden 2012 har bruken av GraphQL økt tilnærmet likt adopsjonstidslinjen som ble angitt av Lee Byron, en av skaperne bak GraphQL. Byrons mål var å gjøre GraphQL allestedsnærværende på tvers av webplattformer.

Den 9. februar 2018 ble GraphQL Schema Definition Language (SDL) en del av spesifikasjonen.

Spesifikasjon av datastrukturer 
GraphQL angir en tilnærming til å utvikle web-API-er, og har blitt sammenlignet med og opp mot REST og andre webtjeneste-arkitekturer. Den tillater klienter å definere strukturen til dataene som kreves, og den samme datastrukturen returneres fra serveren, hvilket forhindrer at store datamengder returneres. Dette har betydning for hvor effektivt man kan få resultater fra spørringer mot webhurtiglagre.

Eksempel 
POST-forespørsel:{
    orders {
        id
        productsList {
            product {
                name
                price
            }
            quantity
        }
        totalAmount
    }
}Svar:{
    "data": {
        "orders": [
            {
                "id": 1,
                "productsList": [
                    {
                        "product": {
                            "name": "orange",
                            "price": 1.5
                        },
                        "quantity": 100
                    }
                ],
                "totalAmount": 150
            }
        ]
    }
}

Oppbygning 
GraphQL består av et typesystem, spørrespråk og utførelsessemantikk, statisk validering og typeintrospeksjon. Den støtter lesing, skriving (mutering) og abonnering på endringer i data (sanntidsoppdateringer), oftest implementert ved hjelp av WebSockets. GraphQL-tjenere er tilgjengelige for flere språk inkludert Haskell, JavaScript, Perl, Python, Ruby, Java, C++, C#, Scala, Go, Rust, Elixir, Erlang, PHP, R, D og Clojure.

Alternativer 
Fleksibiliteten og rikdommen i spørringsspråket legger også opp til en kompleksitet som kanskje ikke er verdt å ha for enkle API-er. Til tross for navnet har ikke GraphQL mulighet for samme mengde av grafoperasjoner som en fullverdig grafdatabase, som for eksempel Neo4j eller enkelte dialekter av SQL som støtter transitiv lukking. Eksempelvis vil man med et GraphQL-grensesnitt som rapporterer foreldrene til et individ ikke kunne returnere mengden med alle disse sine forfedre i en enkelt spørring.

Se også 
OpenAPI Specification

Referanser 

Datamodellering
Grensesnitt for programvare