slogan3

Automatiseer het genereren van dynamische mock API-data met variabele parameters

description

Met deze prompt kan ik een flexibele mock API ontwerpen die automatisch variabele en conditionele data genereert, waardoor ik mijn applicaties kan testen met realistische scenario's zonder steeds handmatig data aan te passen. Dit verhoogt de testefficiëntie en betrouwbaarheid aanzienlijk ten opzichte van statische mock data.

prompt

try_prompt

Help me een mock API te maken die dynamisch gegenereerde data retourneert gebaseerd op variabele parameters. API-doel: <beschrijf het doel van de API>. Endpoints: <specificeer de benodigde endpoints>. Variabele ... more
generate_helper
disclaimerOnPageApi image_legal_disclaimer...

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hieronder geef ik een voorbeeld van hoe je een mock API kunt maken die dynamisch gegenereerde data retourneert op basis van variabele parameters, inclusief enkele voorbeelden van complexe logica zoals conditionele velden en gegenereerde tijdstempels. **1. API-structuur en endpoints** - `/users`: retourneert een lijst van gebruikers, mogelijk gefilterd op parameters zoals leeftijd, status, regio. - `/users/{id}`: retourneert details van een specifieke gebruiker, inclusief dynamisch gegenereerde velden. - `/users/{id}/orders`: retourneert een lijst van bestellingen van een gebruiker, met dynamische data zoals orderdatum en status. **2. Het genereren van data op basis van parameters** Gebruik bijvoorbeeld een mock server-tool zoals [json-server](https://github.com/typicode/json-server) of een eenvoudige Node.js Express app. Hier geef ik een voorbeeld met Node.js en Express. **3. Voorbeeld code** ```js const express = require('express'); const app = express(); const port = 3000; // Helper functies function generateUser(id, params) { const ageOptions = [25, 35, 45, 55]; const statuses = ['active', 'inactive', 'pending']; const regions = ['NL', 'BE', 'DE', 'FR']; const age = ageOptions[id % ageOptions.length]; const status = statuses[id % statuses.length]; const regio = regions[id % regions.length]; // Pas data aan op basis van query parameters if (params.leeftijd && parseInt(params.leeftijd) !== age) { // Als leeftijd parameter bestaat en niet overeenkomt, pas toe // (optioneel: filter de gebruiker niet per se, maar wijzig data) } // Conditie: bijvoorbeeld, als status 'active', voeg extra velden toe const user = { id, naam: `Gebruiker ${id}`, leeftijd: age, regio: regio, status: status, // Conditioneel veld lastLogin: (status === 'active') ? new Date(Date.now() - Math.random() * 1000000000).toISOString() : null, // Tijdstempel createdAt: new Date(Date.now() - Math.random() * 10000000000).toISOString(), }; return user; } function generateOrder(orderId, userId) { const orderDates = [ new Date(Date.now() - 86400000 * 1), // 1 dag geleden new Date(Date.now() - 86400000 * 7), // 1 week geleden new Date(Date.now() - 86400000 * 30), // 1 maand geleden ]; const statuses = ['pending', 'shipped', 'delivered']; const date = orderDates[orderId % orderDates.length]; const status = statuses[orderId % statuses.length]; return { orderId, userId, product: `Product ${orderId}`, aantal: Math.ceil(Math.random() * 5), bestelDatum: date.toISOString(), status, // Complexe logica: bijvoorbeeld, als 'shipped', voeg tracking info toe tracking: (status === 'shipped' || status === 'delivered') ? `TRK${orderId}${userId}` : null, }; } // Endpoint /users app.get('/users', (req, res) => { const { leeftijd, status, regio } = req.query; const users = []; for (let i = 1; i <= 10; i++) { const user = generateUser(i, req.query); // Filteren op parameters if (leeftijd && parseInt(leeftijd) !== user.leeftijd) continue; if (status && status !== user.status) continue; if (regio && regio !== user.regio) continue; users.push(user); } res.json(users); }); // Endpoint /users/:id app.get('/users/:id', (req, res) => { const id = parseInt(req.params.id); const user = generateUser(id, req.query); // Voeg conditionele velden toe if (user.status === 'inactive') { user.inactiveReason = 'Gebruiker is inactief'; } res.json(user); }); // Endpoint /users/:id/orders app.get('/users/:id/orders', (req, res) => { const userId = parseInt(req.params.id); const orders = []; const aantalOrders = Math.ceil(Math.random() * 3); for (let i = 1; i <= aantalOrders; i++) { const order = generateOrder(i, userId); // Conditionele velden if (order.status === 'delivered') { order.feedback = 'Positief'; } orders.push(order); } res.json(orders); }); app.listen(port, () => { console.log(`Mock API draait op http://localhost:${port}`); }); ``` **4. Toepassen van complexe logica** - **Conditionele velden**: Voeg velden toe afhankelijk van andere data, zoals `lastLogin` alleen als gebruiker actief is. - **Gegenereerde tijdstempels**: Gebruik `new Date()` en `Date.now()` om realistische datums te genereren, eventueel met variatie. - **Parameters gebruiken voor filtering**: Filter data op basis van query parameters. - **Variabele data genereren**: Gebruik modulo (`%`) of willekeurige functies om variatie te creëren. **Samenvatting** Met bovenstaande aanpak kun je een mock API maken die dynamisch data produceert gebaseerd op request parameters, met complexe logica zoals conditionele velden en tijdstempels. Je kunt de code aanpassen en uitbreiden afhankelijk van je specifieke wensen voor de productcatalogus of andere datamodellen.
provider: deepseek
model: deepseek-chat
Zeker, ik help je met het opzetten van een mock API met dynamische data. Hier is een complete oplossing met Express.js: ## 1. Eerst de basisopzet ```bash npm init -y npm install express faker lodash ``` ## 2. Server opzetten (server.js) ```javascript const express = require('express'); const faker = require('faker'); const _ = require('lodash'); const app = express(); const port = 3000; app.use(express.json()); // Dynamische data generator const generateUserData = (params = {}) => { const age = params.leeftijd || faker.datatype.number({min: 18, max: 80}); const status = params.status || faker.helpers.randomize(['actief', 'inactief', 'pending']); const region = params.regio || faker.helpers.randomize(['noord', 'oost', 'zuid', 'west']); return { id: faker.datatype.uuid(), naam: faker.name.findName(), email: faker.internet.email(), leeftijd: age, status: status, regio: region, // Conditioneel veld gebaseerd op leeftijd leeftijdsCategorie: age < 30 ? 'jong' : age < 60 ? 'volwassen' : 'senior', // Gegenereerde tijdstempels aangemaaktOp: faker.date.past(2), laatstBijgewerkt: faker.date.recent(), // Complexe logica: premium status gebaseerd op meerdere voorwaarden isPremium: status === 'actief' && age > 25 && ['oost', 'west'].includes(region) }; }; const generateOrderData = (userId, userParams) => { const stockLevel = faker.datatype.number({min: 0, max: 100}); return { orderId: faker.datatype.uuid(), userId: userId, product: faker.commerce.productName(), prijs: faker.commerce.price(), // Dynamische voorraad gebaseerd op parameters voorraad: stockLevel, voorraadStatus: stockLevel === 0 ? 'uitverkocht' : stockLevel < 10 ? 'laag' : 'op_voorraad', // Tijdstempel met complexe logica besteldOp: faker.date.recent(), verwachteLevering: new Date(Date.now() + (userParams.regio === 'noord' ? 3 : userParams.regio === 'zuid' ? 5 : 2) * 86400000), // Conditionele velden heeftSpoedlevering: userParams.leeftijd > 65 || userParams.status === 'premium' }; }; // Endpoints app.get('/users', (req, res) => { const { leeftijd, status, regio } = req.query; const count = parseInt(req.query.count) || 10; const users = Array.from({ length: count }, () => generateUserData({ leeftijd, status, regio }) ); res.json({ totaal: users.length, gebruikers: users, gegenereerdOp: new Date().toISOString() }); }); app.get('/users/:id', (req, res) => { const user = generateUserData(req.query); user.id = req.params.id; // Overschrijf ID met parameter res.json(user); }); app.get('/users/:id/orders', (req, res) => { const orderCount = parseInt(req.query.limit) || 5; const orders = Array.from({ length: orderCount }, () => generateOrderData(req.params.id, req.query) ); res.json({ userId: req.params.id, totaalOrders: orders.length, orders: orders, laatsteUpdate: new Date().toISOString() }); }); app.listen(port, () => { console.log(`Mock API draait op http://localhost:${port}`); }); ``` ## 3. Gebruiksvoorbeelden **Alle gebruikers ophalen met filters:** ```bash GET /users?leeftijd=30&status=actief&regio=west&count=5 ``` **Specifieke gebruiker:** ```bash GET /users/12345?leeftijd=40&status=actief ``` **Orders van gebruiker:** ```bash GET /users/12345/orders?limit=3&regio=noord ``` ## 4. Complexe logica voorbeelden **Conditionele velden:** ```javascript // In generateUserData: leeftijdsCategorie: age < 30 ? 'jong' : age < 60 ? 'volwassen' : 'senior', isPremium: status === 'actief' && age > 25 && ['oost', 'west'].includes(region) ``` **Dynamische tijdstempels:** ```javascript // In generateOrderData: verwachteLevering: new Date(Date.now() + (userParams.regio === 'noord' ? 3 : userParams.regio === 'zuid' ? 5 : 2) * 86400000) ``` **Parameters-based logica:** ```javascript // Voorraad logica gebaseerd op leeftijd en regio const stockMultiplier = userParams.leeftijd > 50 ? 0.8 : 1.2; const regionFactor = userParams.regio === 'zuid' ? 1.5 : 1; voorraad: Math.floor(stockLevel * stockMultiplier * regionFactor) ``` ## 5. Uitbreidingsmogelijkheden - **Middleware** voor parameter validatie - **Caching** mechanisme voor consistente data - **Rate limiting** voor realistische API gedrag - **Database mock** met localStorage voor persistentie Start de server met: `node server.js` en test de endpoints met Postman of curl.