forked from WEB-IB-SS26/development-ib
74 lines
3.0 KiB
Markdown
74 lines
3.0 KiB
Markdown
# Übungsblatt 06
|
||
|
||
## 1. SWAGGER-Übung: Workshop-API
|
||
|
||
**Aufgabenstellung**: Erstellen Sie eine OpenAPI-Spezifikation für die Workshop-Anmeldung aus Übungsblatt 04 ([HTML-Formular](workshop-anmeldung.html)).
|
||
|
||
#### Arbeitsschritte
|
||
|
||
1. Setzen die OpenAPI-Version auf `3.0.0`.
|
||
2. Setzen Sie Meta-Daten wie Titel und API-Version im Info-Objekt.
|
||
3. Setzen Sie `https://web4-637691723779.europe-west1.run.app` als URL im Servers-Objekt.
|
||
4. Setzen Sie einen **Pfad** `/registrierung` für die HTTP-Methode `POST`. Definieren Sie eine Beschreibung, den Request-Body sowie mögliche Antworten des Servers.
|
||
1. Request-Body für die Übergabe von **Formulardaten**
|
||
2. Request-Body für die Übergabe von **JSON-Daten**
|
||
|
||
_Tipp: Verwenden Sie das Components-Objekt._
|
||
|
||
5. Verwenden Sie Enums (https://swagger.io/docs/specification/v3_0/data-models/enums/) für die Spezifikation der Checkboxen und der Radiobuttons (s. Hinweis unten).
|
||
- Beispiel für `enum` in JSON-OpenAPI:
|
||
```json
|
||
"farbe": {
|
||
"type": "string",
|
||
"enum": ["rot","gruen","blau"],
|
||
"example": "gruen"
|
||
},
|
||
```
|
||
6. Testen Sie Ihre API-Spezifikation mit Swagger.
|
||
|
||
#### Hinweis
|
||
Der serverseitige API-Endpunkt hat sich geändert (neue URL: `https://web4-637691723779.europe-west1.run.app`) und wurde nun folgendermaßen implementiert:
|
||
|
||
1. Wenn die Checkbox aktiviert wurde, wird für **agb**, **newsletter** und **equipment** nur noch der Wert (`value`-Attribut) _ja_ akzeptiert.
|
||
2. Für **format** werden die Werte (`value`-Attribut) _online_ und _praesenz_ akzeptiert, je nach dem, welcher Radiobutton aktiviert wurde.
|
||
3. Die Eingabefelder zu Vorname, Nachname, AGB und Format sind nun Pflichtfelder.
|
||
|
||
## 2. Go-Übung: Kommandozeilenprogramm
|
||
|
||
**Aufgabenstellung**: Entwickeln Sie ein Kommandozeilenprogramm in Go, mit dem Nutzer:innen ihre persönliche Büchersammlung verwalten können.
|
||
|
||
#### Arbeitsschritte
|
||
|
||
Implementieren Sie ein Programm mit folgenden Funktionen:
|
||
|
||
1. **Buch hinzufügen**
|
||
```bash
|
||
go run main.go book.go add "Titel" "Autor"
|
||
```
|
||
→ Fügt ein neues Buch zur Sammlung hinzu.
|
||
|
||
2. **Bücher auflisten**
|
||
```bash
|
||
go run main.go book.go list
|
||
```
|
||
→ Zeigt alle Bücher mit ID, Titel, Autor und Lesestatus.
|
||
|
||
3. **Buch als gelesen markieren**
|
||
```bash
|
||
go run main.go book.go read <ID>
|
||
```
|
||
→ Markiert das Buch mit der angegebenen ID als gelesen.
|
||
|
||
4. **Persistenz**
|
||
- Die Bücher sollen in einer Datei `books.json` gespeichert und beim Programmstart wieder geladen werden.
|
||
- Verwenden Sie dafür das `encoding/json`-Paket und `os.ReadFile` / `os.WriteFile`.
|
||
|
||
### Hinweise
|
||
|
||
- Verwenden Sie `struct` für die Buch- und Bibliotheksdaten.
|
||
- Arbeiten Sie mit `slice` zur Verwaltung der Bücherliste.
|
||
- Nutzen Sie Methoden zur Kapselung von Logik (z. B. `Add`, `MarkRead`, `Save`).
|
||
- Behandeln Sie Fehler sinnvoll und benutzerfreundlich.
|
||
- Strukturieren Sie Ihr Projekt in mindestens zwei Dateien (`main.go`, `book.go`). Hierzu müssen Sie Module verwenden. Eine kurze Anleitung dazu finden Sie hier: [Abhängigkeiten mit go.mod](anleitung_extlib.md)
|
||
|