Ontwerp een Mock API voor Geavanceerde Gegevensvalidatie en Regelafhandeling
description
Met deze prompt kan ik een mock API maken die niet alleen basisresponses biedt, maar ook complexe validaties en bedrijfsregels simuleert. Dit maakt mijn testomgeving realistischer, helpt fouten vroegtijdig op te sporen en verhoogt de betrouwbaarheid van mijn applicatie. Het is uitgebreider dan standaard mock APIs omdat het complexe scenario's en foutafhandeling integreert.
prompt
Help me een mock API te ontwerpen die geavanceerde gegevensvalidatie en complexe regelafhandeling ondersteunt voor mijn testomgeving. API doel: <beschrijf het doel van de API>. Belangrijke eindpunten: <noem de belangrijkste API-eindpunten>. Validatieregels: <beschrijf de ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een ontwerp voor een mock API die geavanceerde gegevensvalidatie en complexe regelafhandeling ondersteunt voor jouw testomgeving:
**API Beschrijving:**
- **Basis URL:** https://mockapi.test
---
### 1. Eindpunten
#### a. **/customers**
- **GET:** Haalt alle klanten op
- **POST:** Voegt een nieuwe klant toe
- **PUT /customers/{id}:** Wijzigt een bestaande klant
- **DELETE /customers/{id}:** Verwijdert een klant
#### b. **/orders**
- **GET:** Haalt alle orders op
- **POST:** Plaatst een nieuwe order
- **PUT /orders/{id}:** Wijzigt een order
- **DELETE /orders/{id}:** Verwijdert een order
---
### 2. Validatieregels
#### Voor klantgegevens (/customers):
- **Verplichte velden:** `id` (uniek, UUID), `naam` (string), `email` (string, geldig email), `kredietlimiet` (nummer), `saldo` (nummer)
- **Datatypes:** Zoals hierboven
- **Unieke sleutel:** `id` en `email`
#### Voor ordergegevens (/orders):
- **Verplichte velden:** `order_id` (uniek, UUID), `klant_id` (UUID), `bedrag` (nummer), `datum` (date)
- **Datatypes:** Zoals hierboven
- **Validatie:** `klant_id` moet bestaan in /customers
---
### 3. Businessregels / Complexe controles
- **Klant binnen kredietlimiet:**
Bij het plaatsen van een order, controleer of `saldo + order_bedrag <= kredietlimiet` voor die klant.
Als niet, returneer fout.
- **Voorkomen van dubbele orders:**
Als een order met hetzelfde `order_id` al bestaat, geef een foutmelding.
---
### 4. Foutafhandeling en scenario's
Voor het testen van validatiefouten en uitzonderingen, kunnen de API endpoints worden geconfigureerd om bepaalde foutstatussen te retourneren met bijpassende foutmeldingen.
| Scenario | Statuscode | Foutmelding (JSON) | Omschrijving |
|----------------------------------------|------------|------------------------------------------------------------------|------------------------------------------------------------|
| Verplicht veld ontbreekt | 400 | `{ "error": "Veld 'naam' is verplicht." }` | Validatie fout voor ontbrekend verplicht veld |
| Ongeldige datatypes | 400 | `{ "error": "Ongeldig formaat voor 'email'." }` | Validatie fout bij datatype |
| Unieke sleutel bestaat al | 409 | `{ "error": "Klant met email bestaat al." }` | Duplicate klant email |
| Klant niet gevonden | 404 | `{ "error": "Klant niet gevonden." }` | Bij niet bestaande klant |
| Order met bestaande order_id | 409 | `{ "error": "Order met dit ID bestaat al." }` | Duplicate order ID |
| Klant overschrijdt kredietlimiet | 400 | `{ "error": "Klant overschrijdt kredietlimiet." }` | Businessregel overtreding |
| Onbekende fout / uitzonderingen | 500 | `{ "error": "Interne serverfout." }` | Simulatie van serverfout of uitzonderingen |
| Scenario simulatie voor validatiefouten | Via query parameter, bijvoorbeeld `?test=fout` | Foutmeldingen worden geforceerd voor testen | Handig voor nabootsen van fouten |
---
### 5. Voorbeeld JSON-responses
**Succesvolle response bij POST /customers:**
```json
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"naam": "Jan Janssen",
"email": "jan.janssen@example.com",
"kredietlimiet": 5000,
"saldo": 0
}
```
**Foutmelding bij validatiefout:**
```json
{
"error": "Veld 'naam' is verplicht."
}
```
---
### 6. Extra functionaliteit voor scenario's
Je kunt bijvoorbeeld query parameters toevoegen om foutscenario's te triggeren, zoals:
- `?simulate=validation_error`
- `?simulate=server_error`
De mock API kan deze parameters interpreteren en de juiste foutstatus en bericht teruggeven, zodat je verschillende scenario's kunt testen.
---
### 7. Implementatie-ideeën
- Gebruik een mock server zoals JSON Server, Mockoon, of een aangepaste Express.js server.
- Voeg in de code logica toe om op basis van query parameters foutscenario's te simuleren.
- Bewaar data in geheugen voor testen, met mogelijkheden om data te resetten.
---
Heeft u nog verdere specificaties of wensen voor de API-ontwerp?
provider: deepseek
model: deepseek-chat
Hier is een ontwerp voor een mock API voor klantgegevensbeheer met geavanceerde validatie:
## API Basisstructuur
```json
{
"baseURL": "https://mock-api.example.com/v1",
"authentication": "Bearer token"
}
```
## Eindpunten Specificatie
### 1. GET /customers
- **Beschrijving**: Haal alle klanten op
- **Response**:
```json
{
"customers": [
{
"id": "string",
"naam": "string",
"email": "string",
"kredietlimiet": "number",
"huidigSaldo": "number",
"actief": "boolean"
}
]
}
```
### 2. POST /customers
- **Beschrijving**: Maak nieuwe klant aan
- **Request Body**:
```json
{
"naam": "Verplicht, string, min 2 karakters",
"email": "Verplicht, uniek, geldig email formaat",
"kredietlimiet": "Verplicht, number, min 0, max 100000",
"actief": "boolean, default true"
}
```
### 3. GET /customers/{id}
- **Beschrijving**: Haal specifieke klant op
- **Validatie**: ID moet bestaan
### 4. PUT /customers/{id}
- **Beschrijving**: Update klantgegevens
- **Validatie**: Alle POST validaties + ID moet bestaan
### 5. GET /orders
- **Beschrijving**: Haal alle orders op
- **Query parameters**: customerId (optioneel)
### 6. POST /orders
- **Beschrijving**: Maak nieuwe order aan
- **Request Body**:
```json
{
"customerId": "Verplicht, moet bestaan",
"orderNummer": "Verplicht, uniek, string",
"bedrag": "Verplicht, number, min 0.01",
"producten": [
{
"productId": "string",
"aantal": "number, min 1",
"prijs": "number, min 0"
}
]
}
```
## Geavanceerde Validatieregels
### Verplichte Velden Validatie
```javascript
const requiredFields = {
customer: ['naam', 'email', 'kredietlimiet'],
order: ['customerId', 'orderNummer', 'bedrag']
};
```
### Datatype Validatie
```javascript
const fieldTypes = {
customer: {
naam: 'string',
email: 'string',
kredietlimiet: 'number',
actief: 'boolean'
},
order: {
customerId: 'string',
orderNummer: 'string',
bedrag: 'number'
}
};
```
## Complexe Businessregels
### 1. Kredietlimiet Controle
```javascript
function checkKredietlimiet(customerId, orderBedrag) {
const klant = getCustomer(customerId);
const totaalSaldo = klant.huidigSaldo + orderBedrag;
if (totaalSaldo > klant.kredietlimiet) {
throw new Error('KLANT_KREDIET_OVERSCHREDEN');
}
}
```
### 2. Dubbele Order Preventie
```javascript
function isDubbeleOrder(customerId, orderNummer) {
const bestaandeOrders = getOrdersByCustomer(customerId);
return bestaandeOrders.some(order => order.orderNummer === orderNummer);
}
```
## Foutafhandeling en Response Codes
### Success Responses
- `200 OK` - Succesvolle operatie
- `201 Created` - Succesvol aangemaakt
- `204 No Content` - Succesvol verwijderd
### Client Error Responses (4xx)
```json
{
"error": {
"code": "VALIDATIE_FOUT",
"message": "Een of meer validatiefouten opgetreden",
"details": [
{
"veld": "email",
"fout": "MOET_UNIEK_ZIJN",
"bericht": "Email adres is al in gebruik"
}
]
}
}
```
### Specifieke Foutcodes
```javascript
const errorCodes = {
// Validatiefouten
'ONGELDIGE_DATA': 400,
'VERPLICHT_VELD': 400,
'ONGELDIG_TYPE': 400,
'EMAIL_FORMAT': 400,
// Business regel fouten
'KLANT_NIET_GEVONDEN': 404,
'KLANT_NIET_ACTIEF': 403,
'KLANT_KREDIET_OVERSCHREDEN': 403,
'DUBBELE_ORDER': 409,
'ORDER_NUMMER_NIET_UNIEK': 409,
// Server fouten
'INTERNE_FOUT': 500
};
```
## Test Scenario's
### 1. Succesvolle Klantregistratie
```bash
POST /customers
{
"naam": "Jan Jansen",
"email": "jan@voorbeeld.nl",
"kredietlimiet": 5000
}
```
### 2. Validatiefout Scenario
```bash
POST /customers
{
"naam": "J",
"email": "geen-email",
"kredietlimiet": -100
}
```
Response:
```json
{
"error": {
"code": "VALIDATIE_FOUT",
"message": "3 validatiefouten gevonden",
"details": [
{
"veld": "naam",
"fout": "TE_KORT",
"bericht": "Naam moet minimaal 2 karakters bevatten"
},
{
"veld": "email",
"fout": "ONGELDIG_FORMAT",
"bericht": "Email adres heeft ongeldig formaat"
},
{
"veld": "kredietlimiet",
"fout": "TE_LAAG",
"bericht": "Kredietlimiet moet minimaal 0 zijn"
}
]
}
}
```
### 3. Business Regel Overtreding
```bash
POST /orders
{
"customerId": "123",
"orderNummer": "ORD-001",
"bedrag": 6000
}
```
Response:
```json
{
"error": {
"code": "KLANT_KREDIET_OVERSCHREDEN",
"message": "Order bedrag overschrijdt kredietlimiet van klant",
"details": {
"huidigSaldo": 4500,
"kredietlimiet": 5000,
"gevraagdBedrag": 6000,
"overschrijding": 1500
}
}
}
```
## Implementatie Tips
1. **Mock Data Layer**: Gebruik in-memory database voor testdoeleinden
2. **Middleware**: Implementeer validatiemiddleware voor alle endpoints
3. **Error Handling**: Centrale error handler voor consistente responses
4. **Logging**: Log alle validatiefouten en business regel overtredingen
5. **Configuratie**: Maak validatieregels configureerbaar per omgeving
Deze mock API biedt een robuuste basis voor het testen van zowel happy flow als edge cases in je testomgeving.