Specification
Technical specification with version, status, update date and authors on the title page.
Specification
examples/it-consultant/documents/specifications/2025/specification-001.json{
"metadata": {
"title": "API Migration Spezifikation",
"document_number": "SPEC-2025-001",
"subject": "REST API v2.0 - User Management",
"client_name": "DataFlow Analytics AG",
"project_name": "API Migration Projekt",
"version": "1.2",
"status": "Review",
"tags": ["API", "REST", "Migration", "Backend"],
"authors": ["Max Mustermann", "Anna Fischer"],
"created_at": {
"date": "2025-01-05"
},
"last_updated": {
"date": "2025-01-18"
},
"show_toc": true
},
"content": "= Einleitung\n\n== Zweck des Dokuments\n\nDieses Dokument spezifiziert die Anforderungen und das Design der neuen REST API v2.0 für das User Management System von DataFlow Analytics AG.\n\n== Zielgruppe\n\n- Backend-Entwickler\n- Frontend-Entwickler (API-Konsumenten)\n- QA-Team\n- DevOps-Team\n\n== Änderungshistorie\n\n#table(\n columns: (60pt, 80pt, 1fr, 1fr),\n [*Version*], [*Datum*], [*Autor*], [*Änderung*],\n [1.0], [05.01.2025], [Max Mustermann], [Initiale Version],\n [1.1], [12.01.2025], [Anna Fischer], [Authentication Endpoints hinzugefügt],\n [1.2], [18.01.2025], [Max Mustermann], [Rate Limiting spezifiziert]\n)\n\n= Systemübersicht\n\n== Architektur\n\nDie neue API folgt einer modernen REST-Architektur mit folgenden Komponenten:\n\n- *API Gateway:* NGINX als Reverse Proxy\n- *Application Server:* Node.js mit Express.js Framework\n- *Database:* PostgreSQL 14\n- *Cache:* Redis 7\n- *Authentication:* JWT (JSON Web Tokens)\n\n== Technologie-Stack\n\n```javascript\n// Package Dependencies\n{\n \"express\": \"^4.18.0\",\n \"jsonwebtoken\": \"^9.0.0\",\n \"bcrypt\": \"^5.1.0\",\n \"pg\": \"^8.11.0\",\n \"redis\": \"^4.6.0\",\n \"helmet\": \"^7.1.0\",\n \"express-rate-limit\": \"^7.1.0\"\n}\n```\n\n= Funktionale Anforderungen\n\n== User Management\n\n=== REQ-001: Benutzer erstellen [HIGH]\n\n*Beschreibung:* Das System muss es Administratoren ermöglichen, neue Benutzer anzulegen.\n\n*Endpoint:* `POST /api/v2/users`\n\n*Request Body:*\n```json\n{\n \"email\": \"user@example.com\",\n \"firstName\": \"John\",\n \"lastName\": \"Doe\",\n \"role\": \"user\",\n \"permissions\": [\"read\", \"write\"]\n}\n```\n\n*Response (201):*\n```json\n{\n \"id\": \"uuid-v4\",\n \"email\": \"user@example.com\",\n \"firstName\": \"John\",\n \"lastName\": \"Doe\",\n \"role\": \"user\",\n \"createdAt\": \"2025-01-18T10:30:00Z\"\n}\n```\n\n*Validierung:*\n- Email muss gültig und eindeutig sein\n- firstName und lastName sind Pflichtfelder (min. 2 Zeichen)\n- role muss einem der definierten Rollen entsprechen: `admin`, `user`, `readonly`\n\n=== REQ-002: Benutzer abrufen [HIGH]\n\n*Beschreibung:* Abruf eines einzelnen Benutzers anhand der ID\n\n*Endpoint:* `GET /api/v2/users/{userId}`\n\n*Response (200):*\n```json\n{\n \"id\": \"uuid-v4\",\n \"email\": \"user@example.com\",\n \"firstName\": \"John\",\n \"lastName\": \"Doe\",\n \"role\": \"user\",\n \"permissions\": [\"read\", \"write\"],\n \"createdAt\": \"2025-01-10T10:30:00Z\",\n \"updatedAt\": \"2025-01-18T14:20:00Z\",\n \"lastLogin\": \"2025-01-18T09:15:00Z\"\n}\n```\n\n=== REQ-003: Benutzer aktualisieren [MEDIUM]\n\n*Endpoint:* `PATCH /api/v2/users/{userId}`\n\n*Request Body (partial update):*\n```json\n{\n \"firstName\": \"Jane\",\n \"permissions\": [\"read\", \"write\", \"admin\"]\n}\n```\n\n=== REQ-004: Benutzer löschen [MEDIUM]\n\n*Endpoint:* `DELETE /api/v2/users/{userId}`\n\n*Response (204):* No Content\n\n*Hinweis:* Soft-Delete - Benutzer wird als \"deactivated\" markiert, nicht physisch gelöscht\n\n=== REQ-005: Benutzerliste abrufen [HIGH]\n\n*Endpoint:* `GET /api/v2/users`\n\n*Query Parameters:*\n- `page`: Seitennummer (default: 1)\n- `limit`: Einträge pro Seite (default: 20, max: 100)\n- `role`: Filter nach Rolle\n- `search`: Volltextsuche in Name/Email\n- `sort`: Sortierung (z.B. `createdAt:desc`)\n\n*Response (200):*\n```json\n{\n \"data\": [...],\n \"pagination\": {\n \"page\": 1,\n \"limit\": 20,\n \"total\": 157,\n \"pages\": 8\n }\n}\n```\n\n== Authentication & Authorization\n\n=== REQ-010: Login [HIGH]\n\n*Endpoint:* `POST /api/v2/auth/login`\n\n*Request:*\n```json\n{\n \"email\": \"user@example.com\",\n \"password\": \"SecurePass123!\"\n}\n```\n\n*Response (200):*\n```json\n{\n \"accessToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"refreshToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"expiresIn\": 3600,\n \"user\": {\n \"id\": \"uuid\",\n \"email\": \"user@example.com\",\n \"role\": \"user\"\n }\n}\n```\n\n*Sicherheit:*\n- Passwörter werden mit bcrypt (cost factor 12) gehasht\n- Rate Limiting: 5 Versuche pro 15 Minuten pro IP\n- Account-Sperre nach 10 fehlgeschlagenen Versuchen\n\n=== REQ-011: Token Refresh [HIGH]\n\n*Endpoint:* `POST /api/v2/auth/refresh`\n\n*Request:*\n```json\n{\n \"refreshToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n}\n```\n\n=== REQ-012: Logout [MEDIUM]\n\n*Endpoint:* `POST /api/v2/auth/logout`\n\n*Funktion:* Invalidiert das aktuelle Access Token durch Blacklisting in Redis\n\n= Nicht-funktionale Anforderungen\n\n== Performance\n\n- *Response Time:* \\< 200ms für 95% aller Requests (p95)\n- *Throughput:* Min. 1000 Requests pro Sekunde\n- *Concurrent Users:* Bis zu 10.000 gleichzeitige Nutzer\n\n== Sicherheit\n\n- HTTPS-Only (TLS 1.3)\n- CORS-Policy konfiguriert\n- Helmet.js für Security Headers\n- Input Validation & Sanitization\n- SQL Injection Prevention (Prepared Statements)\n- XSS Protection\n\n== Rate Limiting\n\n```javascript\n// Rate Limiting Konfiguration\nconst limiter = rateLimit({\n windowMs: 15 * 60 * 1000, // 15 Minuten\n max: 100, // Max 100 Requests pro Window\n message: 'Too many requests from this IP'\n});\n```\n\n*Spezielle Limits:*\n- Login: 5 Requests / 15 Minuten\n- User Creation: 10 Requests / Stunde\n- Standard: 100 Requests / 15 Minuten\n\n== Monitoring & Logging\n\n- Strukturiertes Logging (JSON-Format)\n- Request/Response Logging\n- Error Tracking mit Sentry\n- Metrics: Prometheus\n- Visualization: Grafana Dashboard\n\n= API-Dokumentation\n\n== OpenAPI Specification\n\nDie vollständige API wird mit OpenAPI 3.0 dokumentiert und unter `/api/v2/docs` verfügbar gemacht (Swagger UI).\n\n== Versionierung\n\n- URL-basierte Versionierung: `/api/v2/...`\n- Alte Version v1 läuft parallel für 6 Monate\n- Deprecation Warnings in Response Headers\n\n= Testing\n\n== Unit Tests\n\n- Code Coverage: Min. 80%\n- Framework: Jest\n- Alle Business Logic Funktionen\n\n== Integration Tests\n\n- Framework: Supertest\n- Alle API Endpoints\n- Positive & Negative Test Cases\n\n== Load Tests\n\n- Tool: k6\n- Szenarien: 100, 500, 1000 concurrent users\n- Ziel: \\< 200ms Response Time bei 1000 Users\n\n= Deployment\n\n== Staging\n\n- Automatisches Deployment bei Merge in `develop` Branch\n- URL: `https://api-staging.dataflow.com`\n\n== Production\n\n- Blue-Green Deployment Strategie\n- URL: `https://api.dataflow.com`\n- Rollback-Mechanismus innerhalb 5 Minuten\n\n= Offene Punkte\n\n- [ ] Entscheidung über OAuth2 Integration für externe Clients\n- [ ] Finalisierung der GDPR-konformen User-Daten-Export Funktion\n- [ ] Definition der Backup & Recovery Strategie"
}