API-Übersicht¶
Das Backend von AdaptiveLearner exponiert eine FastAPI-REST- API. Im Server-Modus spricht das Frontend mit ihr; im Lokal- (Dexie-)Modus ist die API nicht erreichbar — die gleichen Operationen laufen im Browser.
Basis-URL¶
- Lokal-Dev:
http://localhost:18001/api - Docker-Prod: pro Deployment konfiguriert (z.B.
https://deinedomain.de/api) - GH Pages: nicht anwendbar (Dexie-Modus)
Das Frontend löst die Basis-URL aus VITE_API_BASE zur
Build-Zeit auf; Standard ist /api, sodass der Vite-Dev-
Server-Proxy transparent weiterleitet.
Authentifizierung¶
v0.7.0 hat keine Pro-Request-Authentifizierung. Das System
ist Single-User-pro-Browser: eine user_id liegt im
localStorage und wird in URL-Pfaden mitgegeben
(/users/{user_id}/...). KI-Anbieter-Keys liegen
verschlüsselt (Fernet) im Backend und kommen nie im Klartext
zurück zum Frontend.
Eine zukünftige Multi-User/Multi-Tenant-Phase wird Authentifizierung hinzufügen. Aktuell sollten Deployments hinter einer eigenen Auth-Schicht stehen (Reverse Proxy mit HTTP-Basic-Auth, Tailscale, VPN etc.), wenn ans Netzwerk exponiert.
Response-Format¶
Erfolgreiche Antworten liefern das Daten-Objekt direkt, ohne Envelope:
Listen kommen als JSON-Arrays:
HTTP-Status-Codes:
| Code | Bedeutung |
|---|---|
| 200 | OK (Read) |
| 201 | Created (POST) |
| 204 | No Content (DELETE) |
| 400 | Validierungsfehler (Pydantic) |
| 404 | Nicht gefunden |
| 409 | Konflikt (selten) |
| 422 | Pydantic-Validierungsfehler (FastAPI-Standard) |
| 500 | Serverfehler |
| 502 | Externer Dienst nicht erreichbar (KI-Anbieter) |
Fehler-Format¶
Fehler liefern ein einzelnes detail-Feld:
Pydantic-Validierungsfehler kommen als strukturierte Liste:
{
"detail": [
{"loc": ["body", "daily_minutes"], "msg": "value is not a valid integer", "type": "type_error.integer"}
]
}
Im Debug-Modus (ADAPTIVE_LEARNER_DEBUG=true) enthält die
Response zusätzlich ein traceback-Feld. Produktions-
Deployments sollten Debug ausgeschaltet lassen.
Die ApiError-Klasse des Frontends konsumiert beide Formen —
siehe frontend/src/api/client.ts für den exakten Parser.
Endpoint-Gruppen¶
| Gruppe | Präfix | Zweck |
|---|---|---|
| Health + i18n | /health, /i18n/{lang} |
App-Health + UI-Strings |
| Users | /users |
User-CRUD + verschachtelte Projekte |
| Projects | /projects |
Projekt-scoped Reads / Updates |
| Settings | /settings/{user_id} |
UserSettings + API-Keys |
| Assessment-Plugin | /plugins/assessment/... |
Fragen, Auswerten, Profil |
| Session-Plugin | /plugins/session/... |
Start, Message, Rate, End, Switch |
| Tracking-Plugin | /plugins/tracking/... |
Fortschritt + Commits |
| Tools-Plugin | /plugins/tools/... |
Empfehlungen + Spaced |
| Curriculum | /users/{user_id}/curricula, /curricula/{id} |
Curriculum + Topics + Lessons CRUD |
| Plugin-Discovery | /plugins/manifests, /plugins/health, /plugins/errors |
Was ist registriert |
Siehe Core-Endpoints und Plugin-Endpoints für die volle Methodenliste mit Request/Response-Beispielen.
OpenAPI / Swagger¶
FastAPI generiert automatisch eine OpenAPI-3.1-Spec aus den Pydantic-Schemas. Im Dev-Modus:
- Swagger-UI:
http://localhost:18001/api/docs - Redoc:
http://localhost:18001/api/redoc - Rohes OpenAPI-JSON:
http://localhost:18001/api/openapi.json
Diese sind die autoritative Referenz für jede exakte Endpoint-Form. Die Markdown-Seiten hier sind eine kuratierte Untermenge für Lesbarkeit.
Paginierung¶
v0.7.0-Endpunkte paginieren nicht. Der Datensatz ist Single-User und klein; die größte Liste (Sessions pro Projekt) liegt im niedrigen dreistelligen Bereich, nicht im vierstelligen. Eine spätere Phase wird Cursor-basierte Paginierung einführen, falls der Datenumfang wächst.
Versionierung¶
Die API hat kein Versions-Präfix in der URL. Breaking Changes landen an SemVer-Major-Grenzen; der CHANGELOG dokumentiert, was sich verschoben hat.