Ga naar hoofdinhoud

HTTP-methoden

De methode is het eerste woord van elk request. Ze zegt niet wélke bron je wil, dat doet de URL, maar wat je ermee van plan bent.

GET /gebruikers/42 -> toon me deze gebruiker
DELETE /gebruikers/42 -> verwijder deze gebruiker

Zelfde adres, tegenovergesteld gevolg. De methode kiezen is dus geen stijlkwestie: ze bepaalt wat er gebeurt.

De methoden die je nodig hebt​

MethodeBedoelingBody?Typische statuscode
GETEen bron opvragenNee200 OK
POSTIets nieuws aanmakenJa201 Created
PUTEen bron volledig vervangenJa200 OK
PATCHEen bron gedeeltelijk aanpassenJa200 OK
DELETEEen bron verwijderenZelden204 No Content
HEADAls GET, maar enkel de headersNee200 OK
OPTIONSVragen wat er toegelaten isNee204 No Content

De laatste twee schrijf je zelden zelf. Je komt ze wel tegen: HEAD om te controleren of een groot bestand bestaat zonder het te downloaden, en OPTIONS als preflight bij CORS.

GET​

De methode die je browser standaard gebruikt: elke URL die je intypt of aanklikt, wordt een GET.

curl https://jsonplaceholder.typicode.com/posts/1

GET leest enkel. De server hoort er niets door te veranderen, en het antwoord mag gecacht worden. Dat verklaart de 304 Not Modified die je bij een tweede refresh ziet in de Network tab.

POST​

POST stuurt gegevens mee in de body om iets nieuws aan te maken. De server bepaalt het adres van het resultaat.

curl -X POST https://jsonplaceholder.typicode.com/posts \
-H "Content-Type: application/json" \
-d '{"title": "Mijn post", "body": "Inhoud", "userId": 1}'
{ "title": "Mijn post", "body": "Inhoud", "userId": 1, "id": 101 }

De server geeft de aangemaakte bron terug, aangevuld met het id dat hij toekende.

PUT en PATCH​

Beide wijzigen een bestaande bron, maar niet op dezelfde manier:

PUT /gebruikers/42 body: {"naam": "Robin", "email": "r@ap.be", "rol": "admin"}
-> vervangt de volledige gebruiker. Vergeet je "rol", dan is die weg.

PATCH /gebruikers/42 body: {"email": "nieuw@ap.be"}
-> past enkel dat ene veld aan. De rest blijft staan.
De klassieke PUT-fout

Je haalt een gebruiker op, wijzigt in je formulier één veld, en stuurt met PUT enkel dat veld terug. Alle andere velden zijn dan leeg of verdwenen, want PUT betekent letterlijk "vervang door dit". Wil je één veld aanpassen, gebruik dan PATCH, of stuur bij PUT het volledige object mee.

DELETE​

curl -X DELETE https://jsonplaceholder.typicode.com/posts/1

Meestal krijg je 204 No Content terug: gelukt, en er valt niets te tonen. Een lege body is hier dus geen fout.

Safe en idempotent​

Twee eigenschappen die verklaren waarom browsers, proxy's en API's zich anders gedragen per methode.

EigenschapBetekenisWelke methoden
SafeWijzigt niets op de serverGET, HEAD, OPTIONS
IdempotentTien keer uitvoeren geeft hetzelfde eindresultaat als één keerGET, HEAD, PUT, DELETE
  • PUT /gebruikers/42 met dezelfde body, tien keer na elkaar: de gebruiker ziet er tien keer identiek uit. Idempotent.
  • POST /bestellingen, tien keer na elkaar: tien bestellingen. Niet idempotent.
Daarom waarschuwt je browser bij een refresh na een formulier

"Wilt u het formulier opnieuw verzenden?" verschijnt enkel na een POST. De browser weet dat opnieuw versturen een tweede bestelling kan opleveren. Na een GET vraagt hij niets, want lezen kan geen kwaad.

De juiste methode kiezen​

Stel jezelf in deze volgorde vier vragen:

  1. Lees ik enkel? → GET
  2. Maak ik iets nieuws waarvan de server het adres bepaalt? → POST
  3. Vervang ik een bestaande bron volledig? → PUT. Slechts een deel? → PATCH
  4. Haal ik iets weg? → DELETE

En één regel die alles samenvat: de actie hoort in de methode, niet in de URL. POST /gebruikers/42/verwijderen doet technisch hetzelfde als DELETE /gebruikers/42, maar niemand die je API leest, kan dat nog voorspellen.

1.De lijst met alle bestellingen van een klant tonen
2.Een nieuwe bestelling plaatsen
3.Enkel het e-mailadres van een profiel wijzigen
4.Een volledig profiel vervangen door nieuwe gegevens
5.Een bestelling annuleren en definitief verwijderen
6.De details van product 42 opvragen
7.Een foto toevoegen aan een fotoalbum
8.De volledige tekst van een artikel overschrijven met een nieuwe versie

Methoden in de praktijk​

WaarHoe je de methode instelt
Browser (adresbalk, link)Altijd GET; je kan dat niet kiezen
HTML-formulier<form method="get"> of method="post", meer bestaat er niet
fetch()fetch(url, { method: 'DELETE' })
curlcurl -X DELETE ... (standaard GET, of POST zodra je -d gebruikt)
PostmanHet keuzemenu links van het URL-veld
Zie het zelf in de Network tab

Open de kolom Method in de Network tab (rechtermuisknop op een kolomkop) en verstuur een formulier op eender welke site. Je ziet meteen of de pagina GET of POST gebruikt, en bij een POST verschijnt het tabblad Payload met wat je verstuurde.

Onthoud
  • De methode zegt wat je met de bron wil: GET lezen, POST aanmaken, PUT volledig vervangen, PATCH deels aanpassen, DELETE verwijderen.
  • Safe = wijzigt niets (GET, HEAD). Idempotent = herhalen verandert het eindresultaat niet (GET, PUT, DELETE), en POST is dat niet.
  • PUT vervangt álles wat je meestuurt; wat je vergeet, verdwijnt.
  • De actie hoort in de methode, niet in de URL.