LB03 – Projektarbeit: Backend-API mit Node.js/Express + MySQL
Einleitung
In den ersten zwei Dritteln des Moduls M290 haben Sie sich intensiv mit relationalen Datenbanken, SQL (DDL, DML, DCL), ERM/ERD, Tabellenbeziehungen, JOINs und Aggregatfunktionen beschäftigt.
In der dritten und letzten Leistungsbeurteilung (LB03) verknüpfen Sie dieses Wissen mit einem Backend-Server: Sie implementieren einen Node.js/Express-Server, der über eine REST-API auf Ihre MySQL-Datenbank zugreift. Ein Frontend wird nicht programmiert – stattdessen simulieren Sie es mit Postman.
Wichtig: Das Erklärvideo (Screencast) ist Teil der Leistung. Beide Lernenden müssen darin vorkommen und jeweils einen Teil von Setup/Code verständlich erklären.
Rahmenbedingungen
- Sozialform: Partnerarbeit (2er-Team)
- Zeit: ca. 7 Lektionen Projektzeit im Unterricht (Inputs jeweils zu Beginn der Lektion)
- Abgabe: Letzter Unterrichtstag des Semesters, 21:00 Uhr
- Benotung: Lineare Notenskala (siehe unten)
Auftrag
Sie wählen im 2er-Team einen der beschriebenen Use Cases aus (pro Klasse: jedes Thema nur einmal). Zu diesem Use Case entwickeln Sie:
- ein sauberes Datenmodell (ERM/ERD),
- eine passende MySQL-Datenbank mit Startdaten und einem AppUser,
- einen Express-Server, der die wichtigsten Funktionen als CRUD-API bereitstellt,
- ein Video-Tutorial (Screencast) von ca. 15 Minuten, in dem Sie Ihre Lösung erklären und demonstrieren.
Zielpublikum des Tutorials sind Ihre Mit-Auszubildenden aus dem 2. Lehrjahr, die die Themen
- Daten & Datenbanken,
- Zugriff auf Daten in einer 3-Schichten-Architektur (Client – Server – Datenbank),
- CRUD-Operationen in SQL und über eine REST-API besser verstehen sollen.
Anforderungen (MUSS)
Mindestanforderungen (MUSS)
- Backend läuft (Start über
npm run devodernpm startodernode index.js) - Mindestens 2 Tabellen in MySQL (mit PK/FK)
- Mindestens eine API-Ressource (z.B.
/api/serien) - CRUD vollständig über REST nachweisbar:
GET,POST,PUT,DELETE - Mindestens eine JOIN-Route (Daten aus 2 Tabellen)
- Mindestens eine Aggregat-Route (COUNT/AVG/SUM/MIN/MAX mit GROUP BY)
- Zugriff auf DB nicht als
root, sondern über einen AppUser (Least Privilege) - Video-Tutorial, wo alle Team-Mitglieder darin vorkommen und einen Teil erklären.
Inhalt des Video-Tutorials (Screencast, ca. 15 Minuten)
Das Video soll strukturiert und nachvollziehbar sein und mindestens folgende Teile enthalten:
- Einleitung
- Kurzvorstellung des Use Cases (Problem / Idee)
- Was Ihre App grob können soll
- Analyse & Datenmodell
- Erklärung des ERM (Entitäten, Beziehungen, Kardinalitäten)
- Erklärung des ERD in Crow’s-Foot-Notation (Tabellen, PK/FK, Datentypen)
- Datenbank
- Anlegen der Datenbank & Tabellen per SQL-Skript/Befehlen (DDL)
- Import der Startdaten per SQL-Skript/Befehlen (DML)
- Anlegen und Berechtigen eines AppUsers (DCL) + kurzer Hinweis, warum diese Rechte sinnvoll sind
- Backend / Server
- Aufbau des Node.js/Express-Projekts (wichtigste Dateien kurz erklären:
index.js,package.json) - Erklärung der wichtigsten Routen (z.B.
GET /api/…,POST /api/…)
- Tests mit Postman
- Vorführen der CRUD-Endpunkte (Create, Read, Update, Delete)
- dabei zeigen, dass sich die Daten in der Datenbank wirklich ändern (WebStorm DB-Plugin)
- mindestens eine JOIN-Demo
- mindestens eine Aggregat-Demo
- sinnvolle HTTP-Statuscodes (z.B. 200, 201, 400, 404, 500)
- Reflexion
- Jede Person nennt mindestens 2 Learnings (positiv / herausfordernd)
- Was würden Sie beim nächsten Mal anders machen?
- Schluss
- Kurze Zusammenfassung Ihrer Lösung
- Ausblick / mögliche Erweiterungen
Wichtig für die Bewertung des Verständnisses
- Beide Teammitglieder müssen im Video hörbar sein (eigene Erklärung, nicht nur „ja genau“).
- Beide müssen je einen eigenen Teil erklären (z.B. Person A: DB/SQL/DCL, Person B: API-Routen/Postman/Statuscodes).
- Sie müssen während dem Video zeigen, dass Sie Ihren eigenen Code verstehen (Warum dieser Endpoint? Warum dieser JOIN? Was bedeutet
req.params.id?).
Abgabe – zu liefernde Lernprodukte (ZIP in Moodle)
Im ZIP-File müssen enthalten sein:
- Video-Tutorial (ca. 15 Min)
- Format: MP4 (H.264), max. FullHD (1920×1080), min. 1280×720
- Max. Grösse: 1 GB (Bitrate ca. 3000–5000 kbps)
- ERM und ERD als PDF-Datei
- SQL-Skript (DDL): Anlegen der Tabellenstruktur (Als PDF/Word oder
.sql-File) - SQL-Skript (DML): Import / Insert der Startdaten (Als PDF/Word oder
.sql-File) - SQL-Skript (DCL): AppUser erstellen + Rechte vergeben (Als PDF/Word oder
.sql-File)) - Datenbank-Dump: vollständiges SQL-File (Struktur + Daten) zum Wiederherstellen (
.sql-File) - Node.js-Projektordner
package.json- Server-Datei(en) (z.B.
index.js,connect.js)
Reproduzierbarkeit: Ihr Projekt muss auf einem anderen Rechner mit Ihren Skripten nachvollziehbar eingerichtet werden können.
Bewertungsraster (100 Punkte)
| Bereich | Max. Punkte | Voll erfüllt | Teilweise erfüllt | Nicht erfüllt |
|---|---|---|---|---|
| 1. Projekt-Setup & Reproduzierbarkeit | 8 | Start/Setup klar (alle Dateien sind vorhanden und ausführbar), Server startet zuverlässig, Abgabe sauber strukturiert | Läuft grundsätzlich, aber Setup unklar/fehleranfällig | Start nicht möglich / unvollständig |
| 2. Datenmodell (ERM/ERD) | 12 | Entitäten/Beziehungen korrekt, PK/FK nachvollziehbar, Kardinalitäten stimmen | Modell vorhanden, aber Lücken/FK/Kardinalitäten unklar | Kein brauchbares Modell |
| 3. MySQL-Implementierung (DDL + Datentypen + Constraints) | 10 | DDL ausführbar, Datentypen sinnvoll, PK/FK korrekt, Constraints passend | DDL vorhanden, aber Mängel bei Datentypen/Keys/Constraints | Nicht ausführbar / unpassend |
| 4. Startdaten (DML) | 6 | Mehrere realistische Datensätze, gut testbar | Wenige/teilweise unpassende Daten | Keine Startdaten |
| 5. AppUser & Rechte (DCL, Least Privilege) | 6 | AppUser funktioniert, Rechte minimal sinnvoll, keine root-Nutzung | AppUser vorhanden, aber Rechte unklar/zu breit | Kein AppUser / root verwendet |
| 6. API Design & Struktur | 8 | Konsistente Pfade (/api/…), sinnvolle Ressourcen, /:id korrekt | Routen vorhanden, aber inkonsistent/unsauber | Unklar/chaotisch |
| 7. CRUD über Backend → MySQL | 15 | GET/POST/PUT/DELETE funktionieren, DB ändert sich sichtbar, SQL sauber | CRUD teilweise fehlerhaft/unvollständig | CRUD nicht nachweisbar |
| 8. JOIN-Route | 6 | Mindestens eine Route mit JOIN, Ergebnis sinnvoll | JOIN vorhanden, aber Ergebnis unklar/falsch | Kein JOIN |
| 9. Aggregat-Route (GROUP BY) | 6 | Mindestens eine Aggregat-Route korrekt (COUNT/AVG/SUM etc.) | Aggregat vorhanden, aber unklar/falsch | Kein Aggregat |
| 10. Validierung, Fehlerbehandlung, HTTP-Statuscodes | 8 | 400/404/500 sinnvoll, Pflichtfelder geprüft, verständliche Fehlermeldungen | Teilweise vorhanden, teils falsche Codes | Keine Validierung/Fehlerhandling |
| 11. Video-Tutorial (Screencast) & Verständnisnachweis | 15 | Struktur klar, beide erklären aktiv, Demo mit Postman + DB sichtbar, reflektiert | Video vorhanden, aber unklar/zu kurz/Teamanteil ungleich | Kein Video / Verständnis nicht nachweisbar |
Eigenleistung / Verständnis Sie müssen Ihre Lösung erklären können (SQL, Datenmodell, API, Tests). Wenn zentrale Teile nicht fachlich korrekt begründet werden können, kann der entsprechende Bereich mit 0 Punkten bewertet werden.
Verspätete Abgaben Geben Sie die Projektarbeit verspätet ab, wird pro 24h-Verspätung eine ganze Note abgezogen.
Die Projektarbeit ist der dritte Teil der Modulnote und daher nicht optional. Bei Nicht-Abgabe (ohne Dispens/ärztliches Zeugnis) wird die Note 1 eingetragen.
Notenberechnung (lineare Skala)
Note = 1.0 + 5.0 × (Punkte / 100) (Beispiel: 80 Punkte → 1.0 + 5.0 × 0.80 = 5.0)