Ontwerp een aangepaste mock API voor specifieke testscenario's
description
Met deze prompt kan de gebruiker een mock API creëren die exact aansluit bij hun specifieke testbehoeften, inclusief realistische fouten en vertragingen. Dit maakt het mogelijk om integraties grondiger te testen dan met standaard mocks, waardoor problemen eerder opgespoord worden en de kwaliteit van de software toeneemt.
prompt
try_prompt
Help me een mock API te ontwerpen die specifiek is voor <beschrijf het testscenario> met endpoints zoals <omschrijving van benodigde endpoints> en response struct ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een voorstel voor een mock API die geschikt is voor het testen van login- en logoutfunctionaliteiten met verschillende gebruikersrollen, inclusief endpoints, response structuren, foutafhandeling en vertragingen:
### Algemene principes:
- **Authenticatie:** Bij login krijg je een token dat je bij verdere requests moet gebruiken.
- **Gebruikersrollen:** Verschillende rollen zoals admin, gebruiker, gast, met verschillende toegangsrechten.
- **Simulatie van vertragingen:** Gebruik `setTimeout` of vergelijkbare methoden om vertragingen toe te voegen.
- **Foutafhandeling:** Simuleer foutstatussen zoals 400, 401, 403, 404, 500 met bijbehorende foutberichten.
---
## Endpoints en functionaliteit
### 1. POST /login
- **Doel:** Authenticeren en token teruggeven op basis van gebruikersnaam en wachtwoord.
- **Response:**
```json
{
"token": "abc123",
"role": "admin"
}
```
- **Fouten:** Onjuiste inloggegevens (401), serverfout (500).
### 2. POST /logout
- **Doel:** Uitloggen (token ongeldig maken).
- **Response:** 200 OK met bericht.
- **Fouten:** Ongeldig token (401).
### 3. GET /users
- **Doel:** Lijst van gebruikers ophalen.
- **Response:**
```json
[
{"id":1,"name":"John Doe","role":"admin"},
{"id":2,"name":"Jane Smith","role":"user"}
]
```
- **Toegangscontrole:** Alleen voor admin.
- **Fouten:** Geen toestemming (403), serverfout (500).
### 4. POST /users
- **Doel:** Nieuwe gebruiker toevoegen.
- **Request body:**
```json
{"name":"Nieuwe Gebruiker","role":"user"}
```
- **Response:**
```json
{"id":3,"name":"Nieuwe Gebruiker","role":"user"}
```
- **Fouten:** Ongeldig verzoek (400), geen toestemming (403).
### 5. DELETE /users/{id}
- **Doel:** Gebruiker verwijderen.
- **Response:** 200 OK met bevestiging.
- **Fouten:** Gebruiker niet gevonden (404), geen toestemming (403).
---
## Voorbeeld implementatie in JavaScript (bijvoorbeeld met Express.js)
```javascript
const express = require('express');
const app = express();
app.use(express.json());
let users = [
{ id: 1, name: "John Doe", role: "admin" },
{ id: 2, name: "Jane Smith", role: "user" }
];
let tokens = {}; // token: role
// Helper om vertraging te simuleren
function simulateDelay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// Mock login
app.post('/login', async (req, res) => {
await simulateDelay(500); // 500ms vertraging
const { username, password } = req.body;
// Simpele authenticatie simulatie
if (username === 'admin' && password === 'adminpass') {
const token = 'token-admin';
tokens[token] = 'admin';
res.json({ token, role: 'admin' });
} else if (username === 'user' && password === 'userpass') {
const token = 'token-user';
tokens[token] = 'user';
res.json({ token, role: 'user' });
} else {
res.status(401).json({ error: 'Ongeldige inloggegevens' });
}
});
// Mock logout
app.post('/logout', async (req, res) => {
await simulateDelay(300);
const token = req.headers['authorization'];
if (tokens[token]) {
delete tokens[token];
res.json({ message: 'Uitgelogd' });
} else {
res.status(401).json({ error: 'Ongeldig token' });
}
});
// Middleware voor authenticatie
function authenticate(req, res, next) {
const token = req.headers['authorization'];
if (tokens[token]) {
req.role = tokens[token];
next();
} else {
res.status(401).json({ error: 'Niet geautoriseerd' });
}
}
// Middleware voor toegangscontrole
function authorizeAdmin(req, res, next) {
if (req.role === 'admin') {
next();
} else {
res.status(403).json({ error: 'Toegang geweigerd' });
}
}
// GET /users
app.get('/users', authenticate, authorizeAdmin, async (req, res) => {
await simulateDelay(400);
res.json(users);
});
// POST /users
app.post('/users', authenticate, authorizeAdmin, async (req, res) => {
await simulateDelay(400);
const { name, role } = req.body;
if (!name || !role) {
return res.status(400).json({ error: 'Naam en rol vereist' });
}
const newUser = {
id: users.length + 1,
name,
role
};
users.push(newUser);
res.json(newUser);
});
// DELETE /users/:id
app.delete('/users/:id', authenticate, authorizeAdmin, async (req, res) => {
await simulateDelay(400);
const userId = parseInt(req.params.id);
const index = users.findIndex(u => u.id === userId);
if (index === -1) {
return res.status(404).json({ error: 'Gebruiker niet gevonden' });
}
users.splice(index, 1);
res.json({ message: 'Gebruiker verwijderd' });
});
app.listen(3000, () => {
console.log('Mock API draait op poort 3000');
});
```
---
## Samenvatting
Deze mock API simuleert login- en logoutprocessen, beheert gebruikersgegevens, en bevat realistische vertragingen en foutafhandelingsmechanismen. Zo kun je je integratietests uitbreiden en robuuster maken.
Wil je dat ik de code verder uitbreid of aanpas voor specifieke scenario's?
provider: deepseek
model: deepseek-chat
Hier is een ontwerp voor een mock API met focus op login/logout en gebruikersrollen, inclusief realistische fouten en vertragingen:
## API Basisstructuur
**Base URL:** `https://api.mock-auth.example.com/v1`
## Authenticatie
- JWT Bearer token vereist voor beveiligde endpoints
- Token verloopt na 1 uur
## Endpoints
### 1. GET /users
**Beschrijving:** Haalt alle gebruikers op (alleen voor admins)
**Response (200):**
```json
[
{
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"role": "admin",
"createdAt": "2024-01-15T10:30:00Z"
},
{
"id": 2,
"name": "Jane Smith",
"email": "jane@example.com",
"role": "user",
"createdAt": "2024-01-16T14:22:00Z"
}
]
```
**Foutscenario's:**
- 401 Unauthorized (50% kans bij geen token)
- 403 Forbidden (100% kans bij user-role)
- 500 Internal Server Error (10% kans)
- Vertraging: 200-1500ms
### 2. POST /users
**Beschrijving:** Maakt nieuwe gebruiker aan
**Request Body:**
```json
{
"name": "Nieuwe Gebruiker",
"email": "nieuw@example.com",
"password": "wachtwoord123",
"role": "user"
}
```
**Response (201):**
```json
{
"id": 3,
"name": "Nieuwe Gebruiker",
"email": "nieuw@example.com",
"role": "user",
"createdAt": "2024-01-17T09:45:00Z"
}
```
**Foutscenario's:**
- 400 Bad Request (30% kans bij invalid email)
- 409 Conflict (20% kans bij bestaande email)
- 422 Unprocessable Entity (15% kans)
- Vertraging: 300-2000ms
### 3. DELETE /users/{id}
**Beschrijving:** Verwijderd gebruiker (alleen admins)
**Response (204):** No Content
**Foutscenario's:**
- 404 Not Found (25% kans bij onbekend ID)
- 403 Forbidden (100% kans bij user-role)
- 500 Internal Server Error (5% kans)
- Vertraging: 400-1200ms
### 4. POST /auth/login
**Beschrijving:** Login functionaliteit
**Request Body:**
```json
{
"email": "john@example.com",
"password": "wachtwoord123"
}
```
**Response (200):**
```json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"role": "admin"
}
}
```
**Foutscenario's:**
- 401 Unauthorized (40% kans bij verkeerd wachtwoord)
- 404 Not Found (20% kans bij onbekende email)
- 429 Too Many Requests (10% kans na 3 pogingen)
- Vertraging: 500-3000ms
### 5. POST /auth/logout
**Beschrijving:** Logout functionaliteit
**Response (200):**
```json
{
"message": "Successvol uitgelogd"
}
```
**Foutscenario's:**
- 401 Unauthorized (20% kans bij invalid token)
- Vertraging: 100-800ms
## Gebruikersrollen
- **admin:** Volledige toegang tot alle endpoints
- **user:** Alleen eigen profiel en login/logout
## Implementatietips:
1. Gebruik Express.js met middleware voor vertragingen
2. Implementeer random error generation per endpoint
3. Gebruik JWT voor token management
4. Sla gebruikers op in memory voor eenvoudige mock
5. Voeg rate limiting toe voor realistische tests
```javascript
// Voorbeeld error middleware
app.use((req, res, next) => {
const delay = Math.random() * 2000;
setTimeout(next, delay);
});
```
Deze mock API simuleert real-world scenario's perfect voor robuuste integratietests!

