An API playground created by Mark Winteringham for those wanting to learn more about API testing and tools
@2bittester | Website | Code | API Docs
Welcome to Restful-booker an API that you can use to learn more about API Testing or try out API testing tools against. Restful-booker is a Create Read Update Delete Web API that comes with authentication features and loaded with a bunch of bugs for you to explore. The API comes pre-loaded with 10 records for you to work with and resets itself every 10 minutes back to that default state. Restful-booker also comes with detailed API documentation to help get you started with your API testing straight away.
Je gaat de API restful-booker verkennen, een testplan opstellen op basis van user stories, een Postman collection bouwen met positieve en negatieve tests, en afsluiten met een load test. Deze API bevat met opzet een aantal bugs — het is de bedoeling dat je die tegenkomt en documenteert, niet dat je je tests aanpast totdat ze slagen.
Het IP-adres van de testserver kan per sessie wisselen. Vraag je docent naar het huidige adres en zet het als variabele in een Postman environment (niet als collection variable), zodat je het maar op één plek hoeft aan te passen en later eenvoudig kunt wisselen tussen bijvoorbeeld een lokale en een klassikale omgeving:
baseUrl toe met als initial value én current value bijvoorbeeld http://<huidige-ip>:3001 (zonder / aan het einde).{{baseUrl}}/... in plaats van het IP-adres direct te typen.Zo werkt je hele collection nog steeds als het adres verandert — je past dan alleen de environment-variabele aan, en je collection zelf blijft herbruikbaar voor andere omgevingen.
Doe handmatig een paar requests per endpoint om het gedrag te leren kennen, voordat je iets automatiseert:
GET /ping — health checkPOST /register — een nieuwe gebruiker registreren (wachtwoord moet minimaal 6 tekens lang zijn)POST /auth — een token ophalenGET /booking — alle booking-idsGET /booking/:id — details van één boekingPOST /booking — nieuwe boeking aanmakenPUT en PATCH /booking/:id — boeking bijwerken (volledig / gedeeltelijk)DELETE /booking/:id — boeking verwijderenLet op: voor PUT, PATCH en DELETE heb je een token nodig (via POST /auth), meegestuurd als header Authorization: Bearer <jouw-token>. Je kunt inloggen met het standaardaccount admin/password123, of eerst je eigen account aanmaken via POST /register en daarna daarmee inloggen.
Let ook op: GET /booking/:id heeft op deze server een opzettelijke vertraging van ~3 seconden. Dat is geen bug en geen netwerkprobleem — het is er bewust ingebouwd zodat je het effect goed ziet tijdens de load test in stap 6.
| # | User story |
|---|---|
| 1 | Als operator wil ik een health check endpoint zodat ik kan controleren of de API online is. |
| 2 | Als nieuwe gebruiker wil ik mij kunnen registreren met een gebruikersnaam en wachtwoord zodat ik daarna kan inloggen en een token kan verkrijgen. |
| 3 | Als beheerder wil ik kunnen inloggen met gebruikersnaam en wachtwoord zodat ik een token krijg voor beveiligde acties. |
| 4 | Als bezoeker wil ik alle booking-ids kunnen opvragen, eventueel gefilterd op naam of datum, zodat ik snel een boeking kan terugvinden. |
| 5 | Als bezoeker wil ik de details van een specifieke boeking kunnen opvragen zodat ik mijn reservering kan controleren. |
| 6 | Als gast wil ik een nieuwe boeking kunnen aanmaken zodat ik een kamer kan reserveren. |
| 7 | Als beheerder wil ik een bestaande boeking volledig of gedeeltelijk kunnen bijwerken zodat ik gegevens kan corrigeren. |
| 8 | Als beheerder wil ik een boeking kunnen verwijderen zodat geannuleerde reserveringen niet blijven staan. |
Schrijf voor elke user story minimaal 1 positief en 1 negatief acceptatiecriterium. Gebruik Gherkin (Given/When/Then) of een duidelijke bullet-vorm — overleg met je docent welke vorm gewenst is.
Voorbeeld (user story 6 — boeking aanmaken):
Scenario: Succesvol een boeking aanmaken met geldige data
Given ik een volledige set geldige boekingsgegevens heb (firstname, lastname,
totalprice, depositpaid, bookingdates, additionalneeds)
When ik een POST-request stuur naar /booking met deze gegevens
Then ontvang ik een 200-response
And bevat de response een bookingid
Scenario: Boeking aanmaken zonder verplicht veld
Given ik een set boekingsgegevens heb waarin het veld "firstname" ontbreekt
When ik een POST-request stuur naar /booking met deze gegevens
Then verwacht ik een 400-response (Bad Request)
Vul hieronder je eigen criteria in voor de overige user stories:
| User story | Positief scenario | Negatief scenario |
|---|---|---|
| 1. Health check | ||
| 2. Registreren nieuwe gebruiker | ||
| 3. Authenticatie | ||
| 4. Bookings opvragen | ||
| 5. Boekingsdetails bekijken | ||
| 7. Boeking bijwerken | ||
| 8. Boeking verwijderen |
Bouw een Postman collection met:
pm.test(...), pm.response.to.have.status(...), pm.expect(...))token en bookingId (met pm.collectionVariables.set(...) in een test-script)Draai de volledige collection via de Collection Runner. Documenteer per test:
| Test | Verwacht resultaat | Werkelijk resultaat | Bug gevonden? (toelichting) |
|---|---|---|---|
Een falende negatieve test is vaak net zo waardevol als een geslaagde — het betekent dat je een bug in de API hebt gevonden. Beschrijf wat je zag, verander niet zomaar je assertion om de test te laten slagen.
Gebruik de ingebouwde performance-testfunctie van de Postman desktop-app (niet de webversie):
Je collection moet uiteindelijk automatisch draaien via GitHub Actions bij elke push, niet alleen handmatig vanuit Postman. Hoe je een workflow opzet, behandelen we klassikaal — zie de slides van je docent. Zorg dat je aan het eind kunt laten zien:
.github/workflows/ die je collection met Newman uitvoert