Files
meldestelle/docs/api/README.md
T
2025-10-15 12:48:00 +02:00

390 lines
8.7 KiB
Markdown

# Meldestelle REST API Documentation
## Überblick
Die Meldestelle-Anwendung bietet eine umfassende REST API für die Verwaltung von Pferdesportveranstaltungen. Die API folgt RESTful-Prinzipien und ist in modulare Services unterteilt, die jeweils spezifische Domänen abdecken.
## API-Architektur
### Modulare Service-Struktur
Die API ist in folgende Hauptmodule unterteilt:
```
API Services
├── Members API # Mitgliederverwaltung
├── Horses API # Pferderegistrierung
├── Events API # Veranstaltungsverwaltung
└── Masterdata API # Stammdatenverwaltung
├── Countries # Länderverwaltung
├── States # Bundesländerverwaltung
├── Age Classes # Altersklassenverwaltung
└── Venues # Plätze/Austragungsorte
```
### Technische Spezifikationen
- **Framework**: Spring Boot 3.x mit Spring Web MVC
- **Dokumentation**: OpenAPI 3.0 (Swagger)
- **Serialisierung**: JSON mit Jackson/Kotlinx Serialization
- **Authentifizierung**: JWT Bearer Token
- **Versionierung**: URL-basiert (/api/v1/)
- **Content-Type**: application/json
- **Zeichenkodierung**: UTF-8
## Basis-URL und Endpunkte
### Entwicklungsumgebung
```
Base URL: http://localhost:8081/api
```
### Produktionsumgebung
```
Base URL: https://api.meldestelle.yourdomain.com/api
```
## API-Module Übersicht
### 1. Members API
**Basis-Pfad**: `/api/members`
Verwaltung von Vereinsmitgliedern und deren Mitgliedschaftsdaten.
**Hauptfunktionen**:
- Mitgliederverwaltung (CRUD)
- Mitgliedschaftsstatus-Tracking
- Ablaufende Mitgliedschaften
- Validierung von E-Mail und Mitgliedsnummer
**Controller**: `MemberController`
**Endpunkte**: 12 REST-Endpunkte
**Dokumentation**: [Members API](members-api.md)
### 2. Horses API
**Basis-Pfad**: `/api/horses`
Registrierung und Verwaltung von Pferden mit umfassenden Identifikationsdaten.
**Hauptfunktionen**:
- Pferderegistrierung (CRUD)
- Identifikationsnummern-Verwaltung
- OEPS/FEI-Registrierung
- Besitzer- und Verantwortlichen-Zuordnung
**Controller**: `HorseController`
**Endpunkte**: 15+ REST-Endpunkte
### 3. Events API
**Basis-Pfad**: `/api/events`
Planung und Verwaltung von Pferdesportveranstaltungen.
**Hauptfunktionen**:
- Veranstaltungsplanung (CRUD)
- Terminverwaltung
- Teilnehmerverwaltung
- Öffentliche/Private Veranstaltungen
**Controller**: `VeranstaltungController`
**Endpunkte**: 10+ REST-Endpunkte
### 4. Masterdata API
**Basis-Pfad**: `/api/masterdata`
Verwaltung von Stammdaten für das gesamte System.
#### 4.1 Countries API
**Pfad**: `/api/masterdata/countries`
- Länderverwaltung mit ISO-Codes
- EU/EWR-Mitgliedschaft
- Mehrsprachige Ländernamen
#### 4.2 States API
**Pfad**: `/api/masterdata/states`
- Bundesländer/Kantone/Regionen
- OEPS-Codes für österreichische Bundesländer
- ISO 3166-2 Codes
#### 4.3 Age Classes API
**Pfad**: `/api/masterdata/age-classes`
- Altersklassen für verschiedene Sparten
- Teilnahmeberechtigung
- Geschlechts- und Spartenfilter
#### 4.4 Venues API
**Pfad**: `/api/masterdata/venues`
- Turnierplätze und Austragungsorte
- Platztypen und Abmessungen
- Bodenarten und Eignung
**Controller**: `CountryController`, `BundeslandController`, `AltersklasseController`, `PlatzController`
**Endpunkte**: 37+ REST-Endpunkte
## Gemeinsame API-Konventionen
### HTTP-Status-Codes
| Status Code | Bedeutung | Verwendung |
|-------------|-----------|------------|
| 200 | OK | Erfolgreiche GET/PUT-Anfragen |
| 201 | Created | Erfolgreiche POST-Anfragen |
| 204 | No Content | Erfolgreiche DELETE-Anfragen |
| 400 | Bad Request | Ungültige Anfragedaten |
| 401 | Unauthorized | Fehlende/ungültige Authentifizierung |
| 403 | Forbidden | Unzureichende Berechtigung |
| 404 | Not Found | Ressource nicht gefunden |
| 409 | Conflict | Duplikat oder Geschäftsregel-Verletzung |
| 422 | Unprocessable Entity | Validierungsfehler |
| 500 | Internal Server Error | Serverfehler |
### Standard-Response-Format
Alle API-Endpunkte verwenden ein einheitliches Response-Format:
```json
{
"data": {},
"success": true,
"message": "Operation completed successfully",
"errors": [],
"timestamp": "2025-07-25T12:37:00Z"
}
```
#### Erfolgreiche Antwort
```json
{
"data": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"firstName": "Max",
"lastName": "Mustermann",
"email": "max@example.com"
},
"success": true,
"message": null,
"errors": [],
"timestamp": "2025-07-25T12:37:00Z"
}
```
#### Fehler-Antwort
```json
{
"data": null,
"success": false,
"message": "Validation failed",
"errors": [
"Email address is required",
"First name must not be empty"
],
"timestamp": "2025-07-25T12:37:00Z"
}
```
### Paginierung
Für Listen-Endpunkte wird standardmäßig Paginierung unterstützt:
**Query-Parameter**:
- `limit`: Maximale Anzahl Ergebnisse (Standard: 100, Maximum: 1000)
- `offset`: Anzahl zu überspringende Ergebnisse (Standard: 0)
**Beispiel-Anfrage**:
```
GET /api/members?limit=50&offset=100
```
**Paginierte Antwort**:
```json
{
"data": {
"content": [],
"page": 2,
"size": 50,
"totalElements": 1250,
"totalPages": 25,
"hasNext": true,
"hasPrevious": true
},
"success": true,
"timestamp": "2025-07-25T12:37:00Z"
}
```
### Suchfunktionalität
Viele Endpunkte unterstützen Suchfunktionalität:
**Query-Parameter**:
- `search`: Suchbegriff für Textfelder
- `name`: Suche nach Namen (Teilübereinstimmung)
- `active`: Filter für aktive/inaktive Einträge
**Beispiel**:
```
GET /api/members?search=Schmidt&active=true&limit=20
```
### Sortierung
Sortierung wird über Query-Parameter gesteuert:
**Query-Parameter**:
- `sort`: Sortierfeld (z.B. `name`, `createdAt`)
- `order`: Sortierrichtung (`asc` oder `desc`)
**Beispiel**:
```
GET /api/members?sort=lastName&order=asc
```
## Authentifizierung und Autorisierung
### JWT Bearer Token
Alle API-Endpunkte (außer öffentlichen) erfordern Authentifizierung über JWT Bearer Token:
```http
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
### Rollen und Berechtigungen
| Rolle | Beschreibung | Berechtigungen |
|-------|--------------|----------------|
| ADMIN | Systemadministrator | Vollzugriff auf alle Ressourcen |
| TRAINER | Trainer/Ausbilder | Zugriff auf Pferde und Veranstaltungen |
| MEMBER | Vereinsmitglied | Zugriff auf eigene Daten |
| GUEST | Gast | Nur Lesezugriff auf öffentliche Daten |
## Rate Limiting
Zum Schutz der API vor Überlastung gelten folgende Limits:
- **Authentifizierte Benutzer**: 1000 Anfragen/Stunde
- **Nicht authentifizierte Benutzer**: 100 Anfragen/Stunde
- **Burst-Limit**: 50 Anfragen/Minute
Bei Überschreitung wird HTTP 429 (Too Many Requests) zurückgegeben.
## Fehlerbehandlung
### Validierungsfehler (422)
```json
{
"data": null,
"success": false,
"message": "Validation failed",
"errors": [
{
"field": "email",
"message": "Email address is invalid",
"code": "INVALID_EMAIL"
},
{
"field": "membershipNumber",
"message": "Membership number already exists",
"code": "DUPLICATE_MEMBERSHIP_NUMBER"
}
],
"timestamp": "2025-07-25T12:37:00Z"
}
```
### Geschäftsregel-Verletzungen (409)
```json
{
"data": null,
"success": false,
"message": "Business rule violation",
"errors": [
"Membership end date cannot be before start date"
],
"timestamp": "2025-07-25T12:37:00Z"
}
```
## API-Dokumentation
### Swagger/OpenAPI
Die vollständige API-Dokumentation ist über Swagger UI verfügbar:
- **Entwicklung**: http://localhost:8080/swagger-ui.html
- **Produktion**: https://api.meldestelle.at/swagger-ui.html
### Postman Collections
Postman Collections für alle API-Endpunkte sind verfügbar unter:
- [docs/postman/](../postman/)
## Versionierung
Die API verwendet URL-basierte Versionierung:
- **Aktuelle Version**: v1
- **Basis-URL**: `/api/v1/`
- **Deprecated Versionen**: Werden 12 Monate unterstützt
## Monitoring und Observability
### Health Checks
```
GET /actuator/health
```
### Metriken
```
GET /actuator/metrics
GET /actuator/prometheus
```
### API-Metriken
- Request-Anzahl pro Endpunkt
- Response-Zeiten
- Fehlerquoten
- Rate-Limiting-Statistiken
## Entwicklung und Testing
### Lokale Entwicklung
```bash
# API-Server starten
./gradlew bootRun
# Swagger UI öffnen
open http://localhost:8080/swagger-ui.html
```
### API-Tests
```bash
# Unit Tests
./gradlew test
# Integration Tests
./gradlew integrationTest
# API Tests mit Newman
newman run docs/postman/meldestelle-api.postman_collection.json
```
## Support und Kontakt
- **Dokumentation**: [docs/api/](.)
- **Issue Tracker**: GitHub Issues
- **API-Status**: https://status.meldestelle.at
---
**Letzte Aktualisierung**: 25. Juli 2025
**API-Version**: v1.0
**OpenAPI-Spezifikation**: 3.0.3