Skip to content

How-to: Feedback-Sammlungs-API

Übersicht

Ein Feedback-System, bei dem Benutzer eine Bewertung (1–5) und einen Kommentar für eine Zielentität einreichen. Admins können alle Feedbacks auflisten; ein öffentlicher Stats-Endpunkt zeigt aggregierte Durchschnittswerte.

Referenzimplementierung: ../NENE2-FT/feedbacklog/

Schema

sql
CREATE TABLE IF NOT EXISTS feedback (
    id         INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id    INTEGER NOT NULL,
    target     TEXT    NOT NULL,
    score      INTEGER NOT NULL,   -- 1-5
    comment    TEXT    NOT NULL DEFAULT '',
    created_at TEXT    NOT NULL,
    UNIQUE (user_id, target)
);

Routen

MethodePfadAuthBeschreibung
POST/feedbackBenutzerFeedback einreichen
GET/feedbackAdminAlle Feedbacks auflisten
GET/feedback/statsKeineAggregierte Statistiken

Duplikat-Verhinderung

UNIQUE (user_id, target) erzwingt ein Feedback pro Benutzer pro Ziel auf DB-Ebene. Zunächst Prüfung auf Anwendungsebene:

php
$stmt = $this->pdo->prepare('SELECT id FROM feedback WHERE user_id = :uid AND target = :tgt');
$stmt->execute([...]);
if ($stmt->fetch() !== false) return 'already_submitted';

Bewertungsvalidierung

php
if (!is_int($score) || $score < 1 || $score > 5) {
    return $this->problem(422, 'validation-failed', 'score must be an integer 1-5.');
}

Statistikaggregation

sql
SELECT COUNT(*) AS cnt, AVG(score) AS avg FROM feedback WHERE target = :tgt

Bei einer Anzahl von null null als Durchschnittswert zurückgeben, um NaN in JSON zu vermeiden.

HTTP-Statuscodes

SituationStatus
Feedback eingereicht201
Statistiken / Liste200
Kein X-User-Id400
Leeres Ziel / ungültige Bewertung422
Kein Admin-Schlüssel403
Doppeltes Feedback409

Veröffentlicht unter der MIT-Lizenz.