Hvad er RESTful-programmering egentlig?
Hvad er RESTful-programmering egentlig?
3909
3
Hvad er RESTful-programmering egentlig?
REST er det underliggende arkitektoniske princip for internettet. Det fantastiske ved internettet er, at klienter (browsere) og servere kan interagere på komplekse måder, uden at klienten på forhånd kender noget som helst til serveren og de ressourcer, den er vært for. Den vigtigste begrænsning er, at serveren og klienten begge skal være enige om de medier, der anvendes, hvilket i web-sagen er HTML.
En API, der følger principperne i REST, kræver ikke, at klienten kender noget som helst til API'ens struktur. Serveren skal snarere levere de oplysninger, som klienten har brug for for at kunne interagere med tjenesten. En HTML-formular er et eksempel herpå: Serveren angiver ressourcens placering og de nødvendige felter. Browseren ved ikke på forhånd, hvor den skal indsende oplysningerne, og den ved ikke på forhånd, hvilke oplysninger den skal indsende. Begge former for information leveres udelukkende af serveren (Dette princip kaldes [HATEOAS: Hypermedia As The Engine Of Application State] (https://en.wikipedia.org/wiki/HATEOAS).)
Hvorledes gælder dette for HTTP, og hvordan kan det gennemføres i praksis? HTTP er orienteret omkring verber og ressourcer. De to verber i almindelig brug er
GET
ogPOST
, som jeg tror alle vil genkende. HTTP-standarden definerer imidlertid flere andre, f.eks.PUT
ogDELETE
. Disse verber anvendes så på ressourcer i overensstemmelse med de instruktioner, som serveren giver.Lad os f.eks. forestille os, at vi har en brugerdatabase, som administreres af en webtjeneste. Vores tjeneste bruger et brugerdefineret hypermedie baseret på JSON, som vi tildeler mimetype
application/json+userdb
(der kan også være enapplication/xml+userdb
ogapplication/whatever+userdb
- mange medietyper kan understøttes). Klienten og serveren er begge programmeret til at forstå dette format, men de ved ikke noget om hinanden. Som Roy Fielding påpeger:En forespørgsel efter basisressourcen
/
kan give noget i denne retning:Request
Response
Vi ved fra beskrivelsen af vores medie, at vi kan finde oplysninger om relaterede ressourcer i sektioner kaldet "links". Dette kaldes Hypermedia-kontroller. I dette tilfælde kan vi fra et sådant afsnit se, at vi kan finde en brugerliste ved at lave en anden forespørgsel efter
/user
:Request
Response
Vi kan se meget af dette svar. For eksempel ved vi nu, at vi kan oprette en ny bruger ved at
POST
ing til/user
:Request
Response
Vi ved også, at vi kan ændre eksisterende data:
Anmodning
Response
Bemærk, at vi bruger forskellige HTTP-verber (
GET
,PUT
,POST
,DELETE
osv.) til at manipulere disse ressourcer, og at den eneste viden, vi forudsætter fra klientens side, er vores mediedeklaration.Yderligere læsning:
(Dette svar har været genstand for en del kritik, fordi det ikke har forstået pointen. For det meste har det været en rimelig kritik. Det, jeg oprindeligt beskrev, var mere i overensstemmelse med, hvordan REST normalt blev implementeret for et par år siden, da jeg først skrev dette, end med dets egentlige betydning. Jeg'har revideret svaret for bedre at repræsentere den reelle betydning).
REST bruger de forskellige HTTP-metoder (primært GET/PUT/DELETE) til at manipulere data.
I stedet for at bruge en specifik URL til at slette en metode (f.eks.
/user/123/delete
), sender du en DELETE-forespørgsel til URL'en/user/[id]
, for at redigere en bruger, og for at hente oplysninger om en bruger sender du en GET-forespørgsel til/user/[id]
.I stedet for et sæt URL'er, som f.eks. kan se ud som nogle af følgende...
Du bruger HTTP "verber" og har...
Det er programmering, hvor arkitekturen i dit system passer til REST-stilen, som Roy Fielding har beskrevet i sin afhandling. Da det er den arkitektoniske stil, der beskriver internettet (mere eller mindre), er der mange mennesker, der er interesserede i den.
Bonus svar: Medmindre du studerer softwarearkitektur som akademiker eller designer webtjenester, er der ingen grund til at have hørt udtrykket.