What is a REST API?

HTTP-metoder for RESTful API'er: En Komplet Guide

17/08/2014

Rating: 4.76 (6085 votes)

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.

How do RESTful API operations align with HTTP methods?
In RESTful API design, these operations directly correspond to HTTP methods, providing a consistent structure for resource manipulation. Here’s how they align: Operation: Add new resources. Operation: Retrieve or view existing resources. Operation: Modify existing resources. Operation: Remove resources.
Indholdsfortegnelse

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 PUT og PATCH.
  • 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.

Are HTTP-based APIs compatible with RESTful Web Services?
HTTP-based APIs integrate easily with RESTful web services but often seem illogical, overlapping and inefficient. There are many ways to use HTTP methods, plenty of which aren't compatible with RESTful principles, so it's important to review the HTTP API methods and understand how to use them appropriately.

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 /brugere med brugerdata i anmodningens body.
  • Logge en bruger ind: POST /login med 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:PUT er idempotent. Hvis du sender den samme PUT-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å PUT er ikke cachelagrede.

Eksempler på Anvendelse:

  • Opdater alle oplysninger for bruger 123: PUT /brugere/123 med 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.

Are HTTP-based APIs compatible with RESTful Web Services?
HTTP-based APIs integrate easily with RESTful web services but often seem illogical, overlapping and inefficient. There are many ways to use HTTP methods, plenty of which aren't compatible with RESTful principles, so it's important to review the HTTP API methods and understand how to use them appropriately.

Karakteristika:

  • Ikke Sikker: Ændrer data på serveren.
  • Potentielt Ikke Idempotent: Idempotensen af PATCH afhæ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å PATCH er ikke cachelagrede.

Eksempler på Anvendelse:

  • Opdater kun e-mailadressen for bruger 123: PATCH /brugere/123 med { "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:DELETE er idempotent. Hvis du sender en DELETE-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 med 404 Not Found på 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 MetodeCRUD OperationAnvendelse på Samling (f.eks. /brugere)Anvendelse på Enkelt Ressource (f.eks. /brugere/123)Idempotent?
GETReadReturnerer en liste af ressourcerReturnerer en enkelt ressourceJa
POSTCreateOpretter en ny ressource i samlingenTypisk ikke anvendtNej
PUTUpdate (Replace)Erstatter hele samlingen (sjældent brugt)Erstatter en eksisterende ressource fuldstændigtJa
PATCHUpdate (Modify)Ændrer samlingen (sjældent brugt)Opdaterer en ressource delvistNej (ikke altid)
DELETEDeleteSletter hele samlingen (meget farligt)Sletter en enkelt ressourceJa

Almindelige Fejl og Bedste Praksis

Selvom principperne er simple, er der flere almindelige faldgruber, som udviklere ofte falder i.

What are RESTful HTTP methods?
RESTful HTTP methods are an essential component of developing web APIs in the REST architectural style. They are widely used in modern web development because they provide a standard interface for interacting with server resources.

Fejl at Undgå:

  1. Brug af POST til alt: En almindelig fejl er at bruge POST til operationer, der burde håndteres af GET, PUT eller DELETE. For eksempel at hente data med POST /hentBrugere. Dette bryder med REST-principperne og forhindrer effektiv caching.
  2. Forveksling af PUT og PATCH: At bruge PUT, når kun en delvis opdatering er nødvendig, er ineffektivt. Omvendt, at bruge PATCH til at sende hele ressourcen er semantisk forkert.
  3. Brug af GET til at ændre tilstand: Den måske værste fejl er at bruge GET til 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.

Go up