17/08/2014
I den moderne verden af webudvikling er RESTful API'er blevet rygraden i utallige applikationer. De muliggør kommunikation mellem uafhængigt udviklede klienter og servere på en sikker og standardiseret måde. Kernen i denne standardisering er den korrekte brug af HTTP-metoder. At vælge den rigtige metode til den rigtige operation er ikke kun et spørgsmål om semantik; det er afgørende for at bygge pålidelige, skalerbare og vedligeholdelsesvenlige API'er. En forkert anvendelse kan føre til uventet adfærd, sikkerhedshuller og en frustrerende oplevelse for de udviklere, der skal forbruge dit API. Denne artikel vil dykke ned i de essentielle HTTP-metoder, forklare deres formål i konteksten af REST, og guide dig gennem bedste praksis for at sikre, at dine API'er er både intuitive og robuste.

Forståelse af REST og CRUD
Før vi dykker ned i de specifikke HTTP-metoder, er det vigtigt at forstå de to grundlæggende koncepter, de bygger på: REST og CRUD.
REST står for Representational State Transfer. Det er en arkitektonisk stil, der definerer et sæt af begrænsninger for at skabe skalerbare webtjenester. En af de centrale ideer i REST er, at alt er en ressource. En ressource kan være en bruger, et produkt, en artikel – stort set enhver form for data. Hver ressource kan tilgås via en unik URL (Uniform Resource Locator).
CRUD står for Create, Read, Update, Delete. Dette er de fire grundlæggende operationer, man kan udføre på data i de fleste applikationer. I en RESTful arkitektur er der en direkte sammenhæng mellem CRUD-operationer og HTTP-metoder, hvilket skaber en forudsigelig og standardiseret måde at interagere med ressourcer på:
- Create (Opret): Tilføj en ny ressource. Svarer til HTTP-metoden
POST. - Read (Læs): Hent en eksisterende ressource. Svarer til HTTP-metoden
GET. - Update (Opdater): Ændre en eksisterende ressource. Svarer til HTTP-metoderne
PUTogPATCH. - Delete (Slet): Fjern en eksisterende ressource. Svarer til HTTP-metoden
DELETE.
Denne kortlægning sikrer, at API-operationer er logiske og lette at forstå for enhver udvikler, der kender til HTTP-standarden.
Dybdegående Gennemgang af de Vigtigste HTTP-Metoder
Lad os nu undersøge de fem mest fundamentale HTTP-metoder, som enhver API-udvikler bør kende indgående.
GET: Til at Hente Ressourcer
GET er den mest almindelige og simple HTTP-metode. Dens eneste formål er at hente en repræsentation af en specificeret ressource. En GET-anmodning bør aldrig ændre tilstanden på serveren.

Karakteristika:
- Sikker (Safe): En
GET-anmodning er defineret som en 'sikker' metode, fordi den ikke modificerer data på serveren. Den er udelukkende en læse-operation. - Idempotent: Metoden er idempotent, hvilket betyder, at flere identiske
GET-anmodninger vil have præcis den samme effekt som en enkelt anmodning. Resultatet vil være det samme, uanset hvor mange gange du kalder den (medmindre en anden klient har ændret ressourcen i mellemtiden). - Cachelagret (Cacheable): Svar på
GET-anmodninger kan blive cachet af klienten eller mellemliggende servere for at forbedre ydeevnen.
Eksempler på Anvendelse:
- Hent en liste over alle brugere:
GET /brugere - Hent detaljer for en specifik bruger:
GET /brugere/123 - Filtrer brugere baseret på en parameter:
GET /brugere?rolle=admin
POST: Til at Oprette Nye Ressourcer
POST-metoden bruges primært til at oprette en ny underordnet ressource inden for en samling af ressourcer. For eksempel, når du opretter en ny bruger, sender du en POST-anmodning til /brugere-samlingen.
Karakteristika:
- Ikke Sikker: En
POST-anmodning ændrer tilstanden på serveren ved at oprette en ny ressource. - Ikke Idempotent: Dette er en afgørende egenskab. Hvis du sender to identiske
POST-anmodninger, vil du typisk oprette to separate, identiske ressourcer med forskellige ID'er. Derfor er det ikke en idempotent operation. - Ikke Cachelagret: Svar på
POST-anmodninger er generelt ikke cachelagrede.
Eksempler på Anvendelse:
- Opret en ny bruger:
POST /brugeremed brugerdata i anmodningens body. - Logge en bruger ind:
POST /loginmed brugernavn og adgangskode.
Ved en succesfuld oprettelse bør serveren svare med statuskoden 201 Created og inkludere en Location-header, der peger på URL'en for den nyoprettede ressource (f.eks. Location: /brugere/124).
PUT: Til at Erstatte en Ressource
PUT-metoden bruges til at opdatere en eksisterende ressource ved fuldstændigt at erstatte den. Klienten sender en komplet repræsentation af ressourcen, og serveren erstatter den gamle version med den nye.
Karakteristika:
- Ikke Sikker: Ændrer data på serveren.
- Idempotent:
PUTer idempotent. Hvis du sender den sammePUT-anmodning flere gange med de samme data, vil resultatet på serveren være det samme efter den første anmodning. Ressourcens tilstand vil være den, du har sendt, uanset antallet af kald. - Ikke Cachelagret: Svar på
PUTer ikke cachelagrede.
Eksempler på Anvendelse:
- Opdater alle oplysninger for bruger 123:
PUT /brugere/123med den komplette, opdaterede brugerprofil i anmodningens body.
Hvis ressourcen med det specificerede ID ikke findes, kan et API vælge enten at oprette en ny ressource med det ID eller returnere en 404 Not Found-fejl. Hvis en eksisterende ressource opdateres, er en 200 OK eller 204 No Content statuskode passende.
PATCH: Til at Opdatere en Ressource Delvist
Hvor PUT erstatter hele ressourcen, bruges PATCH til at foretage en delvis opdatering. Du sender kun de felter, der skal ændres, i stedet for hele objektet.

Karakteristika:
- Ikke Sikker: Ændrer data på serveren.
- Potentielt Ikke Idempotent: Idempotensen af
PATCHafhænger af operationen. En simpel opdatering som at sætte en værdi (f.eks. opdater e-mail) er idempotent. En operation som at tilføje et element til en liste er ikke. Derfor skal man være forsigtig. - Ikke Cachelagret: Svar på
PATCHer ikke cachelagrede.
Eksempler på Anvendelse:
- Opdater kun e-mailadressen for bruger 123:
PATCH /brugere/123med{ "email": "[email protected]" }i anmodningens body.
PATCH er mere effektiv end PUT, når kun små ændringer er nødvendige, da det reducerer mængden af data, der sendes over netværket.
DELETE: Til at Slette en Ressource
Som navnet antyder, bruges DELETE-metoden til at fjerne en specificeret ressource.
Karakteristika:
- Ikke Sikker: Ændrer tilstanden ved at fjerne data.
- Idempotent:
DELETEer idempotent. Hvis du sender enDELETE-anmodning for/brugere/123, vil ressourcen blive slettet. Efterfølgende anmodninger til den samme URL vil ikke ændre tilstanden yderligere (ressourcen er allerede væk). Serveren vil typisk svare med404 Not Foundpå efterfølgende kald, men den overordnede tilstand forbliver den samme: ressourcen eksisterer ikke.
Eksempler på Anvendelse:
- Slet bruger 123:
DELETE /brugere/123
Et succesfuldt svar er typisk 200 OK (hvis der returneres en statusmeddelelse) eller 204 No Content (hvis intet returneres).
Sammenligningstabel over HTTP-metoder
For at give et hurtigt overblik, er her en tabel, der opsummerer de primære metoder og deres anvendelse.
| HTTP Metode | CRUD Operation | Anvendelse på Samling (f.eks. /brugere) | Anvendelse på Enkelt Ressource (f.eks. /brugere/123) | Idempotent? |
|---|---|---|---|---|
| GET | Read | Returnerer en liste af ressourcer | Returnerer en enkelt ressource | Ja |
| POST | Create | Opretter en ny ressource i samlingen | Typisk ikke anvendt | Nej |
| PUT | Update (Replace) | Erstatter hele samlingen (sjældent brugt) | Erstatter en eksisterende ressource fuldstændigt | Ja |
| PATCH | Update (Modify) | Ændrer samlingen (sjældent brugt) | Opdaterer en ressource delvist | Nej (ikke altid) |
| DELETE | Delete | Sletter hele samlingen (meget farligt) | Sletter en enkelt ressource | Ja |
Almindelige Fejl og Bedste Praksis
Selvom principperne er simple, er der flere almindelige faldgruber, som udviklere ofte falder i.

Fejl at Undgå:
- Brug af POST til alt: En almindelig fejl er at bruge
POSTtil operationer, der burde håndteres afGET,PUTellerDELETE. For eksempel at hente data medPOST /hentBrugere. Dette bryder med REST-principperne og forhindrer effektiv caching. - Forveksling af PUT og PATCH: At bruge
PUT, når kun en delvis opdatering er nødvendig, er ineffektivt. Omvendt, at brugePATCHtil at sende hele ressourcen er semantisk forkert. - Brug af GET til at ændre tilstand: Den måske værste fejl er at bruge
GETtil at udføre handlinger, der ændrer data, f.eks.GET /brugere/123/slet. Dette er farligt, da webcrawlere og caching-mekanismer kan aktivere disse links utilsigtet og forårsage datatab.
Bedste Praksis:
- Brug navneord i dine endepunkter: Endepunkter skal repræsentere ressourcer (navneord), ikke handlinger (udsagnsord). Handlingen defineres af HTTP-metoden. Korrekt:
GET /artikler. Forkert:GET /hentArtikler. - Brug korrekte HTTP-statuskoder: Returner meningsfulde statuskoder (f.eks.
200 OK,201 Created,400 Bad Request,404 Not Found,500 Internal Server Error) for at give klienten klar feedback. - Implementer versionering: Når dit API udvikler sig, skal du bruge versionering (f.eks.
/api/v1/brugere) for at undgå at ødelægge eksisterende integrationer. - Sikre dit API: Brug altid HTTPS, implementer autentificering (f.eks. OAuth 2.0) og valider al input for at beskytte mod angreb.
Ofte Stillede Spørgsmål (FAQ)
Hvad er den største forskel på PUT og PATCH?
Den primære forskel er, hvordan de opdaterer en ressource. PUT erstatter hele ressourcen med de data, du sender. Hvis du udelader et felt, vil det typisk blive fjernet eller sat til en standardværdi. PATCH anvender en delvis opdatering; du sender kun de felter, du ønsker at ændre, og resten af ressourcen forbliver urørt.
Hvorfor er det vigtigt, at en GET-anmodning er 'sikker'?
En 'sikker' metode garanterer, at den ikke ændrer serverens tilstand. Dette er afgørende, fordi browsere, søgemaskiner og andre automatiserede systemer frit kan udføre GET-anmodninger uden risiko for at forårsage utilsigtede ændringer, såsom at slette data eller foretage et køb.
Kan jeg bruge POST til at opdatere en ressource?
Teknisk set kan du, men det er imod REST-principperne. POST er beregnet til at oprette nye ressourcer. Til opdatering bør du bruge PUT (for fuld erstatning) eller PATCH (for delvis opdatering). At følge konventionerne gør dit API mere forudsigeligt og lettere at arbejde med for andre udviklere.
Hvad betyder 'idempotent' i praksis?
I praksis betyder idempotens, at du sikkert kan gentage en anmodning uden at bekymre dig om utilsigtede sideeffekter. Dette er især nyttigt i ustabile netværk. Hvis en klient sender en DELETE-anmodning og ikke modtager et svar (måske på grund af en netværksfejl), kan den trygt sende anmodningen igen. Den første anmodning sletter ressourcen, og den anden vil blot bekræfte, at den ikke længere eksisterer, uden at forårsage en fejl.
Konklusion
At designe RESTful API'er er mere end blot at skabe endepunkter; det handler om at bygge et intuitivt, pålideligt og skalerbart system for datainteraktion. Korrekt og konsekvent brug af HTTP-metoder er fundamentet for dette. Ved at forstå og anvende GET, POST, PUT, PATCH og DELETE i overensstemmelse med deres definerede formål, sikrer du, at dit API er let at forstå, forudsigeligt i sin adfærd og let at vedligeholde. At følge disse etablerede standarder vil ikke kun forbedre kvaliteten af din software, men også lette samarbejdet mellem udviklerteams og gøre integration med tredjeparter langt smidigere.
Hvis du vil læse andre artikler, der ligner HTTP-metoder for RESTful API'er: En Komplet Guide, kan du besøge kategorien Sundhed.
