---
title: Vad är GraphQL?
description: GraphQL är 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 all data som behövs.
image: https://blog.entiros.se/hubfs/1_uvd7Z4npUG8qulaQLjHcZw.jpeg
---

[** Back to Entiros 

](https://www.entiros.se)

 2018-10-19 | [GraphQL](https://blog.entiros.se/sv/blogg-media/topic/graphql) | [Programming](https://blog.entiros.se/sv/blogg-media/topic/programming) | [Educational](https://blog.entiros.se/sv/blogg-media/topic/educational)

# Vad är GraphQL?

 av [**Fredrik Orinius**](https://blog.entiros.se/sv/blogg-media/author/fredrik-orinius)

[ ‹ Tillbaka till listningen ](https://blog.entiros.se/sv/blogg-media)

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?**

- När API:t skapas för en känd klient: Klientens behov av data är känt och ett skräddarsytt API effektiviserar utveckling och användning. 
- När klienten eller dess utvecklare behöver ett enkelt gränssnitt: Flexibiliteten hos frågespråket behövs inte, utan komplicerar för vissa utvecklare eller typer av klienter. 
- När klientens behov av data styrs av en eller få och kända parametrar, t ex datum, sorteringsordning och antal: Domänen och dess data kan vara så enkel till sin natur att få och enkla REST-anrop är optimalt.
- När klientens behov av data inte ändras till sin struktur, t ex att samma sorts objekt hämtas och merparten av dess egenskaper används: Vissa tjänster och data är hård förankrade i standarder eller hävd och har därför låg förändringsgrad.
- När andra datatyper än text behöver hämtas direkt: GraphQL har inte stöd för andra mediatyper än text, t ex bilder, video, ljud, binärdata osv.

**När är och för vem är GraphQL bäst?**

- När klientens behov av urval av objekt varierar eller är avancerat, t ex urval via relationer mellan objekt: Domänen är komplex till struktur och har potentiellt hög omsättning av data, aktiv utveckling av server- och klientdel kan bromsas av fasta API:er.
- När klienten behöver göra följdfrågor mot servern baserat på en tidigare hämtning: Då data har djup struktur och/eller relationer mellan dessa eller då urvalskriterier är många eller har komplexa villkor.
- När klientens behov av objektens parametrar varierar, t ex då bara få parametrar i stora objekt behövs: Om data behöver samlas ihop från flera typer av objekt måste ett REST-API skräddarsys för detta för att undvika onödig belastning på server och nätverk.

![d5QaPsG](http://i.imgur.com/d5QaPsG.gif)

 

**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.

### **Publicering av GraphQL-API:er**

**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](https://github.com/sheerun/graphqlviz) 

[GraphQL Visualizer ](http://nathanrandal.com/graphql-visualizer)

[GraphQL Voyager](https://github.com/APIs-guru/graphql-voyager)

![demo](https://raw.githubusercontent.com/sheerun/graphqlviz/master/demo.gif)

![demo-gif](https://raw.githubusercontent.com/APIs-guru/graphql-voyager/master/docs/demo-gif.gif)

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](https://github.com/apollographql/apollo-client/): En produktionsfärdig GraphQL-klient främst för [React](https://en.wikipedia.org/wiki/React_(JavaScript_library)), men även för JavaScript, iOS och  
Android. MIT Licens.

[**Relay / Relay Modern**](https://facebook.github.io/relay/): Ett javascriptbibliotek för att bygga React-applikationer baserade på GraphQL. Utvecklat och används av Facebook. Publicerat under MIT License.

**[React](https://github.com/facebook/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](https://github.com/graphql-java/graphql-java), [Ruby](https://github.com/rmosolgo/graphql-ruby), [Python](https://www.howtographql.com/graphql-python/0-introduction/), [Elexir](https://www.howtographql.com/graphql-elixir/0-introduction/), [Scala](https://www.howtographql.com/graphql-scala/0-introduction) och [JavaScript (i NodeJS)](https://www.howtographql.com/graphql-js/1-getting-started/). 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](https://www.howtographql.com/).

### PRENUMERERA PÅ VÅRT NYHETSBREV

## Läs vidare

[

**Jonas Törnblad Sandell** | 2019-01-28

### Webinar: why you are failing with your integration landscape

Har du full koll på ditt integrationslandskap? Vet du hur många integrationer du har? Känner du till kvalitén på integrationerna samt vilka [...]

** 1 min

**

GraphQL

Programming

Educational

](https://blog.entiros.se/sv/blogg-media/why-you-are-failing-with-your-integration-landscape) [

**Jonas Törnblad Sandell** | 2018-11-16

### Certified Integrator lanserad vid Nordic APIs

Certified Integrator lanserad vid Nordic APIs Vid Nordic APIs i Stockholm förra veckan lanserades en ny certifiering för IT-branschen. Certi [...]

** 3 min

**

GraphQL

Programming

Educational

](https://blog.entiros.se/sv/blogg-media/certified-integrator-lanserad-vid-nordic-apis)

[** Back to Entiros 

](https://www.entiros.se)

Made with

in Sweden

**Visit us**  
Kungsgatan 20, SE-582 18 Linköping  
Storgatan 25, SE-573 32 Tranås

**Email us**  
[info@entiros.se](mailto:info@entiros.se)

**Call us**  
+46 (0)140 770 087

[![entiros-black](https://blog.entiros.se/hubfs/entiros-black.png "entiros-black")](https://www.entiros.se)