it-praxisportal/courses/go/14_json_apis_und_middleware
2026-08-30 13:10:38 +02:00
..
aufgabe.go Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00
index.html Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00
musterloesung.go Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00
README.md Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00
test_aufgabe.go Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00

Go 14: REST JSON APIs & Middleware-Pipelines 🛡️

Willkommen zu Modul 14 des Go Cloud & Concurrency Lehrpfads!

RESTful JSON APIs sind das Rückgrat moderner Cloud-Microservices. In diesem Modul lernst du das Zusammenspiel von Struct-Tags, JSON-Streaming und modularen Middleware-Chains (Authentication, Recovery & Logging).


💡 1. Das Wichtigste in Kürze

JSON Struct Tags

type Device struct {
    ID     int    `json:"id"`
    Name   string `json:"name"`
    IP     string `json:"ip"`
    Active bool   `json:"active"`
}

JSON Dekodierung & Enkodierung

// 1. JSON lesen:
var req Device
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
    http.Error(w, `{"error":"invalid json"}`, http.StatusBadRequest)
    return
}

// 2. JSON antworten:
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(response)

Das Middleware Chaining Pattern

func ApplyMiddleware(h http.Handler, middlewares ...func(http.Handler) http.Handler) http.Handler {
    for i := len(middlewares) - 1; i >= 0; i-- {
        h = middlewares[i](h)
    }
    return h
}

🎯 Aufgaben in aufgabe.go

  1. TODO 1 (Device & APIResponse): Definiere die Structs mit passenden JSON-Tags (json:"id", json:"name", json:"ip", json:"active", json:"success", json:"message", json:"data,omitempty").
  2. TODO 2 (GetDevicesHandler & CreateDeviceHandler):
    • GetDevicesHandler: Gibt die aktuelle Liste als JSON zurück.
    • CreateDeviceHandler: Parst den JSON-Body, validiert Name und IP (dürfen nicht leer sein), vergibt ID und hängt das Gerät an.
  3. TODO 3 (AuthMiddleware): Prüft den Header X-API-Key. Stimmt er nicht mit dem erwarteten Schlüssel überein, liefert die Middleware 401 Unauthorized.
  4. TODO 4 (RecoveryMiddleware & ApplyMiddleware): Fängt unerwartete Panics mit recover() ab und antwortet mit Status 500 Internal Server Error.

🧪 Tests ausführen

go test -v ./...