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
| Methode | Bedoeling | Body? | Typische statuscode |
|---|---|---|---|
| GET | Een bron opvragen | Nee | 200 OK |
| POST | Iets nieuws aanmaken | Ja | 201 Created |
| PUT | Een bron volledig vervangen | Ja | 200 OK |
| PATCH | Een bron gedeeltelijk aanpassen | Ja | 200 OK |
| DELETE | Een bron verwijderen | Zelden | 204 No Content |
| HEAD | Als GET, maar enkel de headers | Nee | 200 OK |
| OPTIONS | Vragen wat er toegelaten is | Nee | 204 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.
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.
| Eigenschap | Betekenis | Welke methoden |
|---|---|---|
| Safe | Wijzigt niets op de server | GET, HEAD, OPTIONS |
| Idempotent | Tien keer uitvoeren geeft hetzelfde eindresultaat als één keer | GET, HEAD, PUT, DELETE |
PUT /gebruikers/42met 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.
"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:
- Lees ik enkel? →
GET - Maak ik iets nieuws waarvan de server het adres bepaalt? →
POST - Vervang ik een bestaande bron volledig? →
PUT. Slechts een deel? →PATCH - 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.
Methoden in de praktijk
| Waar | Hoe 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' }) |
curl | curl -X DELETE ... (standaard GET, of POST zodra je -d gebruikt) |
| Postman | Het keuzemenu links van het URL-veld |
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.
- De methode zegt wat je met de bron wil:
GETlezen,POSTaanmaken,PUTvolledig vervangen,PATCHdeels aanpassen,DELETEverwijderen. - Safe = wijzigt niets (
GET,HEAD). Idempotent = herhalen verandert het eindresultaat niet (GET,PUT,DELETE), enPOSTis dat niet. PUTvervangt álles wat je meestuurt; wat je vergeet, verdwijnt.- De actie hoort in de methode, niet in de URL.