Vad är ett REST API?

REST står för REpresentational State Transfer. Begreppet myntades av Roy Fielding, en av författarna bakom HTTP-specifikationen, det vill säga den som utgör grunden för all trafik på webben (hemsidor). API står för Application Programming Interface och är en generell benämning på gränssnitt som är främst tänkt för datorer att interagera mot snarare än ett gränssnitt ämnat för människor.

Ett REST API är ett sätt på vilket man bygger ett API som baseras på de funktioner som finns i HTTP (Hyper Text Transfer Protocol). Det finns många smarta funktioner i HTTP som gör att webben fungerar så bra som den gör. Tanken med REST är att utnyttja så mycket av detta som möjligt istället för att hitta på nya sätt att hantera överföringen på.

Fördelar med REST

Fördelarna med ett REST-baserat API är många. Dels så kan ett REST-API använda sig av den grundläggande strukturen för webben. Då denna struktur är välkänd för de flesta utvecklare betyder det att den är både lätt att bygga efter samt lätt att förstå.

En av grundstenarna i REST är att varje anrop ska vara ”stateless” (det är svårt att översätta men tillståndslöst beskriver det bäst) från servern. Vad det innebär är att servern ska vara helt ovetandes om tillståndet som gäller vid anropet. All information om tillståndet ska lagras på klienten. När ett anrop kommer till servern ska det utvärderas endast utifrån innehållet i anropet och utan vetskap om tidigare kommunikation. Eventuell sessions-nyckel ska finnas med i anropet. Fördelen med detta är att där kan vara många olika servrar som svarar på anropen. Klienten behöver inte veta vilken server det är som svarar så länge den får ett svar. Det är främst denna egenskap som gör det möjligt att skapa en skalbar tjänst som kan hantera tusentals samtidiga användare.

HTTP är byggt för att en rad servrar ska kunna hjälpas åt att tillhandahålla allt innehåll. I HTTP finns det inbyggt en mekanism för att ”minnas” data som överförs i olika skede, detta kallas en cache. Det finns cache på flera olika nivåer. Servern som skapar innehållet har ibland en cache, sedan utnyttjas det mellanlagrande servrar i ett så kallat CDN (Content Delivery Network, ett innehållsleveransnätverk). På mottagarsidan kan det finnas proxy-servrar och till sist har även webbläsaren en egen cache. Dessa cache-funktioner gör det möjligt för webben att fungera på en global nivå. Genom att bygga ett REST-API gör man det möjligt att utnyttja samma cache-funktioner även för program. Detta kan mångfaldigt förbättra prestanda för både server och klient.

Teknisk beskrivning av REST

Rent tekniskt baseras REST på samma grund som HTTP. Det vill säga en URI (Uniform Resource Identifier, eller webbadress som man ofta kallar dem) och ett verb. URI:n anger vad det är som ska behandlas och verbet vad som ska utföras. Det vanligaste verbet är GET som hämtar informationen om en resurs. Det är exempelvis ett GET-anrop via HTTP till vår hemsida newseed.se som har hämtat denna sida som du just nu läser.

Ett exempel på ett enkelt REST-API:

URIVerbBeskrivning
/produkterGETHämtar en lista över alla produkter
/produkter
POSTSkapar en ny produkt
/produkter/{id}GETHämtar en produkt med ett visst ID
/produkter/{id}
PUTErsätter all information om produkten
/produkter/{id}DELETERaderar produkten

Trots sin enkelhet – eller kanske på grund av den – finns där dock många fallgropar. Ska man ange resursnamn i plural eller singular? Hur hanteras en sökning? Hur ska gruppering av resurser hanteras? Oftast finns det en överenskommen praxis hur dessa löses på bästa sätt. Ett API blir lättare att förstå om de är byggt på samma sätt som andra liknande API:er.

Postman REST API
Det går att ansluta till newseed.se via ett REST-API. Här ser ni ett exempel på ett anrop via Postman.

REST är inte bundet till något specifikt programmeringsspråk, det går att skriva i vilket språk som helst. På NewSeed har vi exempelvis utvecklat i bland annat Java, PHP och NodeJS. Innehållsverktyget WordPress har exempelvis ett REST-API som är inbyggt. Detta API går att använda för att bygga funktioner för att automatisera publicering av information. Det går även använda för att göra WordPress till ett så kallat headless CMS.

Innehållet som överförs via REST är ofta JSON eller XML. Dessa är båda text-filer i ett speciellt format. Det som utbytes mellan server och klient är rådata som ska behandlas. Det finns ingen begränsning i format så även andra format kan användas. Det går även att bygga API:er som tar emot och hanterar bilder eller annan binär-data.

Nackdelar med REST

Som med allt finns det såklart även nackdelar. Dess enkelhet – som även kallas en fördel – är också en nackdel. Det kan vara svårt att hitta lämpliga lösningar för all typ av kommunikation när man använder baserar allt på en så pass enkel struktur.

Att all kommunikation är tillståndslös är också en fördel som kan bli en nackdel. I vissa fall kan det finnas resurskrävande anrop som bäst utförs av en och samma server som kommer ihåg resultatet mellan anropen.

Då REST inte är en strikt standard kan det leda till dåligt strukturerade API:er.

Sammanfattning

Genom att bygga REST-API:er utnyttjar man den grundstruktur som finns och som driver hela webben. Detta get fördelar med skalbarhet då den befintliga infrastrukturen kan utnyttjas. Ett REST-API är också enkelt att förstå då alla är uppbyggda på ungefär samma sätt. Varje resurs har en URI och behandlas med hjälp av olika verb. De fördelar som finns kan även upplevas som nackdelar – detta gäller framförallt enkelheten.

  • Gemensam struktur baserad på HTTP
  • Tillståndslöst, varje anrop är komplett och kan behandlas av vilken server som helst
  • Kan utnyttja den cache som hela webben bygger på
  • Vilket programmeringsspråk som helst kan användas

Vare sig det rör som att bygga nya eller att bygga systemlösningar baserat på befintliga REST-API så kan NewSeed hjälpa er. På NewSeed har vi många års erfarenhet av denna typ av utveckling och känner till vilken praxis som gäller vid utveckling av egna API.

    En timmes kostnadsfri rådgivning

    Vill ni ha inspiration eller veta vad som är möjligt? Kontakta oss på NewSeed så bokar vi in ett möte och diskuterar just era idéer. NewSeed förverkligar idéer.


    Lund/MalmöGöteborgStockholmTelefon