2 KiB
2 KiB
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
- 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"). - TODO 2 (
GetDevicesHandler&CreateDeviceHandler):GetDevicesHandler: Gibt die aktuelle Liste als JSON zurück.CreateDeviceHandler: Parst den JSON-Body, validiertNameundIP(dürfen nicht leer sein), vergibt ID und hängt das Gerät an.
- TODO 3 (
AuthMiddleware): Prüft den HeaderX-API-Key. Stimmt er nicht mit dem erwarteten Schlüssel überein, liefert die Middleware401 Unauthorized. - TODO 4 (
RecoveryMiddleware&ApplyMiddleware): Fängt unerwartete Panics mitrecover()ab und antwortet mit Status500 Internal Server Error.
🧪 Tests ausführen
go test -v ./...