Aufgabe 06-1a - API auf Papier
Lernziele
Abschnitt betitelt „Lernziele“- Du legst Ressourcen, Endpunkte, Methoden und Statuscodes nach REST-Konventionen fest.
- Du definierst JSON-Verträge mit verbindlichen Beispielen und einem einheitlichen Fehlerformat.
- Du reviewst fremde Entwürfe systematisch und arbeitest ein erhaltenes Review nachvollziehbar ein.
Ausgangslage
Abschnitt betitelt „Ausgangslage“Bevor ihr eine Schnittstelle baut, entwerft ihr sie: eine vollständige REST-API als Dokument, das ein anderes Team umsetzen könnte (siehe Kapitel Schnittstellen entwerfen, Einheit 6.1 für die Stufe Wesentlich_überwiegend, Einheit 6.2 ab Wesentlich_vollständig). Der Entwurf ist verbindlich: Genau dieses Dokument wird in Aufgabe 09-1a implementiert; jede Lücke von heute ist ein Bug von übermorgen.
Szenario: Schulbuffet-Vorbestellung. Schülerinnen und Schüler sehen das Tagesangebot des “Safi”-Buffets, bestellen bis 9:00 Uhr vor und holen mit einer Abholnummer ab. Das Safi-Team pflegt das Angebot (Artikel mit Name, Preis, verfügbarer Menge) und arbeitet die Bestellliste ab (offen, fertig, abgeholt). Eine Bestellung enthält 1 bis 5 Positionen; stornieren geht nur, solange sie offen ist.
Ressourcen- und Feldnamen im Entwurf sind englisch (/api/items, /api/orders), die Dokumentationstexte deutsch.
Allgemein
Abschnitt betitelt „Allgemein“Projektordner anlegen siehe https://qiz.at/projektordner
- Lies vorher kurz https://qiz.at/assignmentsabgabe durch.
- Nur vollständige Abgaben (siehe https://qiz.at/rules) können positiv bewertet werden.
- Abgabe- und Testdetails siehe https://qiz.at/assignmentsabgabe
- Die Übung liegt als Unterordner
uebung-06-1ain deinem Jahres-RepositorySJ26_27_4AHITM_SEW_<Benutzername>_exercises. Ihr arbeitet zu zweit an einem Dokumentapi.md; beide legen es in ihrem eigenen Repository ab und nennen imREADME.mddie Teampartnerin oder den Teampartner.
Wesentlich_überwiegend
Abschnitt betitelt „Wesentlich_überwiegend“Aufgabe
Abschnitt betitelt „Aufgabe“- Bestimmt die Ressourcen des Szenarios mit je einem Satz Begründung. Kandidaten:
items,orders; prüft, ob die Abholnummer eine eigene Ressource ist oder ein Feld. - Erstellt die Endpunkt-Tabelle: Methode, Pfad, Zweck, wer das darf (Schüler:in oder Buffet-Team). Jede Aktion steckt in der Methode, keine Verben in Pfaden.
- Legt Query-Parameter fest, wo gefiltert werden muss, etwa
GET /api/orders?state=open. - Definiert für jeden Endpunkt Request- und Response-Body als konkretes JSON-Beispiel; Eingabe- und Ausgabeformat getrennt, wo sie sich unterscheiden (der Server vergibt
id,pickupNumber,state,createdAt).
Tipp: Geht die Abläufe des Szenarios einmal laut durch: Angebot ansehen, bestellen, abholen, stornieren, Angebot pflegen. Jeder Ablauf braucht mindestens einen Endpunkt. Preise als ganze Zahl in Cent, Zeitstempel im ISO-8601-Format (Einheit 6.1).
Bewertungskriterien
Abschnitt betitelt „Bewertungskriterien“Vollständig, wenn:
- die Ressourcen begründet sind und die Abholnummer richtig eingeordnet ist.
- die Endpunkt-Tabelle alle Abläufe des Szenarios abdeckt, ohne Verben in Pfaden, mit Rollen.
- jedes Beispiel-JSON zu den Feldnamen passt und Eingabe- und Ausgabeformat getrennt sind.
Wie unter Allgemein.
Wesentlich_vollständig
Abschnitt betitelt „Wesentlich_vollständig“Für alle, die in der Einheit mit den Schritten oben fertig sind bzw. optional (= freiwillig), wenn du in der Einheit nicht fertig wirst.
Aufgabe
Abschnitt betitelt „Aufgabe“Erweitere (siehe Erweitern in https://qiz.at/rules) den vollständigen Teil der vorherigen Stufe dieser Datei (ändere oder lösche nur, was für diese Aufgabe unbedingt notwendig ist):
- Legt die Statuscodes fest: wann
200,201,204,400,403,404,409. Entscheidet und begründet insbesondere: Welcher Code, wenn die Menge nicht reicht? Welcher, wenn nach 9:00 Uhr bestellt wird? - Definiert das einheitliche Fehlerformat (
errormitcode,message, optionaldetails) und gebt je ein Beispiel für einen Validierungs- und einen Konfliktfehler. - Bringt das Dokument in die Form aus Einheit 6.2: pro Endpunkt Zweck, Request-Body, alle Antworten mit Status und Beispiel.
Tipp: Unterscheidet “die Anfrage ist falsch” (
400) von “die Anfrage ist in Ordnung, passt aber nicht zum aktuellen Zustand” (409). Kein Endpunkt bekommt ein eigenes Fehlerformat.
Bewertungskriterien
Abschnitt betitelt „Bewertungskriterien“Vollständig, wenn:
- jeder Statuscode einem Fall zugeordnet ist und die Entscheidungen zu Menge und Bestellschluss begründet sind.
- das Fehlerformat für alle Fehler gilt und beide Beispiele es einhalten.
- jeder Endpunkt Zweck, Body und alle Antworten mit Beispiel dokumentiert.
Wie unter Allgemein.
PlusPlus Aufgabe
Abschnitt betitelt „PlusPlus Aufgabe“Für alle, die in der Einheit mit den Schritten oben fertig sind bzw. optional (= freiwillig), wenn du in der Einheit nicht fertig wirst.
Aufgabe
Abschnitt betitelt „Aufgabe“Erweitere (siehe Erweitern in https://qiz.at/rules) den vollständigen Teil der vorherigen Stufe dieser Datei (ändere oder lösche nur, was für diese Aufgabe unbedingt notwendig ist):
Tauscht Entwürfe mit einem anderen Team und prüft systematisch:
- Lässt sich jede Anforderung des Szenarios mit den Endpunkten abbilden? Spielt die Abläufe durch.
- Sind die Beispiele in sich widerspruchsfrei (Feldnamen, Typen, Formate)?
- Gibt es Verstöße gegen die Konventionen (Verben in Pfaden, falsche Codes, fehlende Fehlerfälle)?
- Was passiert, wenn zwei Personen gleichzeitig den letzten Artikel bestellen? Ist der Fall dokumentiert?
Schreibt mindestens vier Befunde in review.md; jeder nennt Fundstelle, verletztes Kriterium und einen Vorschlag.
Tipp: Die fünf Prüffragen aus Einheit 6.2 sind eure Checkliste. Die stärkste Frage ist die letzte: Könntet ihr allein aus dem Dokument einen Client schreiben?
Bewertungskriterien
Abschnitt betitelt „Bewertungskriterien“Vollständig, wenn:
- mindestens vier Befunde vorliegen, jeder mit Fundstelle, Kriterium und Vorschlag.
- die Abläufe des Szenarios nachweislich durchgespielt wurden.
- der Gleichzeitigkeitsfall geprüft ist.
Wie unter Allgemein.
MandalorianPlus Aufgabe
Abschnitt betitelt „MandalorianPlus Aufgabe“Für alle, die in der Einheit mit den Schritten oben fertig sind bzw. optional (= freiwillig), wenn du in der Einheit nicht fertig wirst.
Aufgabe
Abschnitt betitelt „Aufgabe“Erweitere (siehe Erweitern in https://qiz.at/rules) den vollständigen Teil der vorherigen Stufe dieser Datei (ändere oder lösche nur, was für diese Aufgabe unbedingt notwendig ist):
- Arbeitet das erhaltene Review ein und dokumentiert je Befund: übernommen (wie?) oder begründet abgelehnt. Das Ergebnis ist Version 2 des Dokuments; Version 1 bleibt als
api-v1.mderhalten. - Härtetest: Schreibt nur auf Basis des fremden Dokuments die TypeScript-Interfaces und zwei beispielhafte
fetch-Aufrufe gegen die fremde API inhardening.ts. Jede Stelle, an der ihr raten musstet, geht als Nachtrag ans andere Team. - Ergänzt in Version 2 einen Abschnitt “Änderungsregeln”: Welche Änderungen an dieser API wären additiv, welche brechend? Je zwei Beispiele.
- Beurteilt in drei Sätzen: Welcher Befund hätte unentdeckt den teuersten Fehler bei der Implementierung verursacht, und warum?
Tipp:
hardening.tsmuss nur kompilieren, nicht laufen; die fremde API gibt es noch nicht. Typische Rate-Stellen: Ist die Abholnummer ein String oder eine Zahl? In welcher Zeitzone stehtcreatedAt?
Bewertungskriterien
Abschnitt betitelt „Bewertungskriterien“Vollständig, wenn:
- jeder Befund mit “übernommen” oder begründet “abgelehnt” protokolliert ist und Version 1 erhalten bleibt.
hardening.tskompiliert und die Rate-Stellen als Nachtrag dokumentiert sind.- die Änderungsregeln je zwei richtige Beispiele enthalten und die Beurteilung begründet ist.
Wie unter Allgemein.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Warum stehen in REST-Pfaden Substantive und keine Verben?
- Mit welchem Statuscode und welchem Body antwortet ein gelungenes
POST /api/orders? - Wofür steht
409, und welche Fälle des Szenarios brauchen ihn? - Warum sind konkrete Beispiel-JSONs Pflicht und abstrakte Feldlisten nicht genug?
- Woran erkennt man eine brechende API-Änderung?
Zeit dafür
Abschnitt betitelt „Zeit dafür“Durchschnittlich bis Wesentlich_vollständig: ca. 100 min
Änderungen
Abschnitt betitelt „Änderungen“| Datum | Änderung |
|---|---|
| 08.10.2026 | Ausgangslage: Bestellschluss einheitlich 9:00 Uhr (das Szenario nannte vorher 11:00 Uhr, die Aufgabe zum Statuscode 9:00 Uhr). |
Autoren
Abschnitt betitelt „Autoren“- Oliver Maurhart (MAO)
- Michael Gabriel (GAM)
CC-BY-SA