slogan3

Ontwerp een Mock API voor Geautomatiseerde Validatie van API Response Formaten

description

Met deze prompt kan ik snel een mock API ontwikkelen die automatisch controleert of de responseformaten aan mijn specificaties voldoen. Dit voorkomt fouten in de client en bespaart tijd bij het opsporen van inconsistenties. Het biedt ook de mogelijkheid om foutieve responses te simuleren, waardoor mijn applicatie beter bestand is tegen onvoorziene situaties.

prompt

Help me een mock API te ontwerpen die automatisch controleert of de responseformaten van mijn API voldoen aan specifieke structuurvereisten en datatypes. API doel: <beschrijf het doel van de API>. Hoofdendpoints: <lijst de belangrijkste endpoints>. Verwachte response-structuren: <bes ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hieronder vind je een ontwerp voor een mock API die automatisch controleert of de responseformaten voldoen aan jouw specificaties, inclusief validatieregels en voorbeelden van afwijkende/foutieve responses voor robuust testen. ### 1. API Ontwerp #### Endpoints - `GET /user/{id}`: Haalt een gebruikersprofiel op. - `POST /user`: Maakt een nieuw gebruikersprofiel aan. - `PUT /user/{id}`: Wijzigt een bestaand gebruikersprofiel. - `DELETE /user/{id}`: Verwijdert een gebruikersprofiel. ### 2. Response Structuur Elke response moet een JSON-object bevatten met: - `id` (integer) - `naam` (string, max 50 tekens) - `email` (string, geldig formaat) - Optioneel: `telefoon` (string) ### 3. Validatieregels - `email`: moet een geldig e-mailadres zijn (gebruik regex of een library). - `naam`: max 50 tekens. - `telefoon`: optioneel, mag niet verplicht zijn. - Responses worden gecontroleerd op bovenstaande structuur en datatypes. ### 4. Implementatievoorbeeld (in pseudo-code / JSON-schema) ```json { "type": "object", "properties": { "id": { "type": "integer" }, "naam": { "type": "string", "maxLength": 50 }, "email": { "type": "string", "format": "email" }, "telefoon": { "type": "string" } }, "required": ["id", "naam", "email"] } ``` ### 5. Validatie script (voorbeeld in JavaScript met AJV) ```js const Ajv = require("ajv"); const ajv = new Ajv({ allErrors: true, strict: false }); const responseSchema = { type: "object", properties: { id: { type: "integer" }, naam: { type: "string", maxLength: 50 }, email: { type: "string", format: "email" }, telefoon: { type: "string" } }, required: ["id", "naam", "email"] }; function validateResponse(data) { const validate = ajv.compile(responseSchema); const valid = validate(data); if (!valid) { console.error(validate.errors); return false; } return true; } ``` ### 6. Voorbeelden van juiste en foutieve responses #### Correct voorbeeld ```json { "id": 123, "naam": "Jan Jansen", "email": "jan.jansen@example.com", "telefoon": "0612345678" } ``` #### Foutieve voorbeelden voor robuustheid - **Verkeerd datatype voor id** ```json { "id": "123", "naam": "Jan Jansen", "email": "jan.jansen@example.com" } ``` - **Naam te lang** ```json { "id": 124, "naam": "Jan Jansen met een heel lange naam die meer dan 50 tekens bevat", "email": "jan.jansen@example.com" } ``` - **Ongeldig email formaat** ```json { "id": 125, "naam": "Jan Jansen", "email": "jan.jansen[at]example.com" } ``` - **Ontbrekende verplichte velden** ```json { "id": 126, "naam": "Jan Jansen" } ``` - **Extra ongeschikte velden (indien niet toegestaan)** ```json { "id": 127, "naam": "Jan Jansen", "email": "jan.jansen@example.com", "adres": "Straat 123" } ``` ### 7. Automatisering en testen - Gebruik een mock server (bijv. met Node.js en Express) die elke response valideert met bovenstaande schema. - Bij afwijkingen: log fouten en stuur een foutmelding terug. - Voeg tests toe die verschillende correcte en incorrecte responses simuleren. --- Wil je dat ik een voorbeeldcode opzet voor een mock server die automatisch controleert?
provider: deepseek
model: deepseek-chat
Hier is een ontwerp voor een mock API met validatie en foutsimulatie: ### Mock API Ontwerp **Basis Setup:** ```javascript // Gebruik Express.js met JSON middleware const express = require('express'); const app = express(); app.use(express.json()); ``` **Validatiemiddleware:** ```javascript const validateUser = (req, res, next) => { const { naam, email, telefoon } = req.body; // Naam validatie if (!naam || naam.length > 50) { return res.status(400).json({ error: 'Naam is verplicht en mag maximaal 50 tekens bevatten' }); } // Email validatie const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!email || !emailRegex.test(email)) { return res.status(400).json({ error: 'Geldig email formaat is vereist' }); } next(); }; ``` **Hoofdendpoints:** 1. **GET /user** ```javascript app.get('/user', (req, res) => { const users = [ { id: 1, naam: "Jan Jansen", email: "jan@voorbeeld.nl", telefoon: "0612345678" }, { id: 2, naam: "Marie Bakker", email: "marie@voorbeeld.nl" } ]; res.json(users); }); ``` 2. **GET /user/{id}** ```javascript app.get('/user/:id', (req, res) => { const user = { id: parseInt(req.params.id), naam: "Test Gebruiker", email: "test@voorbeeld.nl", telefoon: "0612345679" }; res.json(user); }); ``` ### Foutsimulatie Endpoints voor Robuustheidstesten: **1. Ongeldige datatypes:** ```javascript app.get('/user/fout/datatype', (req, res) => { res.json({ id: "ongeldig_id", // Moet integer zijn naam: 12345, // Moet string zijn email: 99999 // Moet string zijn }); }); ``` **2. Ontbrekende velden:** ```javascript app.get('/user/fout/ontbrekend', (req, res) => { res.json({ id: 1 // naam en email ontbreken opzettelijk }); }); ``` **3. Onjuiste email formaten:** ```javascript app.get('/user/fout/email', (req, res) => { res.json({ id: 1, naam: "Test Gebruiker", email: "geen-email" // Ongeldig formaat }); }); ``` **4. Te lange naam:** ```javascript app.get('/user/fout/naam-lang', (req, res) => { res.json({ id: 1, naam: "A".repeat(60), // 60 tekens > maximum 50 email: "test@voorbeeld.nl" }); }); ``` **5. Extra onverwachte velden:** ```javascript app.get('/user/fout/extra-velden', (req, res) => { res.json({ id: 1, naam: "Test Gebruiker", email: "test@voorbeeld.nl", onverwachtVeld: "niet_gespecificeerd_in_api", nogEenVeld: 12345 }); }); ``` **6. Lege response:** ```javascript app.get('/user/fout/leeg', (req, res) => { res.json(null); }); ``` **7. Server errors:** ```javascript app.get('/user/fout/server-error', (req, res) => { res.status(500).json({ error: "Interne server fout" }); }); ``` ### Test Suggesties: 1. **Implementeer automatische validatie** met een schema validator zoals Joi of Yup 2. **Maak unit tests** die alle foutscenario's doorlopen 3. **Test edge cases**: - Lege strings - Null waarden - Speciale tekens in namen - Internationale email formaten 4. **Performance testing** met grote datasets 5. **Content-Type validatie** voor JSON responses **Starten van de mock server:** ```javascript const PORT = 3000; app.listen(PORT, () => { console.log(`Mock API draait op http://localhost:${PORT}`); }); ``` Dit ontwerp geeft je een solide basis om zowel succesvolle als foutieve API responses te testen, waardoor je client applicatie robuust wordt tegen verschillende response scenario's.