💎 Lehrpfad 4: Cloud Microservices & Web

Go 13: Webserver & Routing mit net/http

Erstelle produktionsreife Webserver ohne externe Frameworks: Nutze Gos mÀchtige Standardbibliothek net/http, ServeMux-Routing, Query-Parameter und HTTP-Statuscodes.

📂 Dateien dieser Lerneinheit:
📄 aufgabe.go (Startercode) đŸ§Ș test_aufgabe.go (Tests) 💡 musterloesung.go (Lösung) 📖 README.md

🌐 1. Der Go HTTP-Server: Standardbibliothek pur

Im Gegensatz zu vielen anderen Sprachen benötigt Go fĂŒr performante Web-APIs keine externen Frameworks. Jeder eingehende Request wird von der Go-Runtime automatisch in einer eigenen, leichtgewichtigen Goroutine verarbeitet!

[Browser / Client] ─── HTTP GET /api/v1/health ───> [net/http Server :8080]
                                                                â”‚
                                                [ServeMux Router]
                                                      â”œâ”€â”€ /health ──> go HealthHandler()
                                                      â””── /echo   â”€â”€> go EchoHandler()
package main

import (
    "fmt"
    "net/http"
)

// Handler-Funktion: Signatur muss immer (http.ResponseWriter, *http.Request) sein!
func HelloHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method != http.MethodGet {
        http.Error(w, "Methode nicht erlaubt", http.StatusMethodNotAllowed)
        return
    }

    w.WriteHeader(http.StatusOK)
    fmt.Fprintln(w, "Hallo aus dem Go Webserver!")
}

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/hello", HelloHandler)

    fmt.Println("Server lÀuft auf http://localhost:8080")
    http.ListenAndServe(":8080", mux)
}

🔍 2. Query-Parameter & URL-Pfade auslesen

Über das *http.Request-Objekt greifst du auf Query-Strings (?search=golang&page=2), HTTP-Header und URL-Pfade zu:

func SearchHandler(w http.ResponseWriter, r *http.Request) {
    // 1. Query-Parameter parsen (?query=...):
    searchQuery := r.URL.Query().Get("query")
    if searchQuery == "" {
        http.Error(w, "Parameter 'query' fehlt", http.StatusBadRequest)
        return
    }

    // 2. Pfad-PrÀfixe analysieren:
    path := r.URL.Path // z.B. "/search"

    fmt.Fprintf(w, "Suchergebnis fĂŒr: %s (Pfad: %s)", searchQuery, path)
}
🏱 Didaktische Analogie: Die Poststelle im Großkonzern

Stell dir net/http wie eine moderne Poststelle vor: Der *http.Request ist der Briefumschlag mit Absender, Zieladresse (URL) und Stempeln (Headern). Der http.ResponseWriter ist das leere Antwortformular, in das du den Statuscode stempelst (WriteHeader) und den Antwortbrief schreibst. Der ServeMux ist die Sortieranlage, die den Brief an die zustÀndige Fachabteilung (Handler) weiterleitet.

📑 3. Cheat-Sheet: Wichtige HTTP-Statuscodes & Methoden

Go Konstante Code Bedeutung
http.StatusOK 200 Anfrage erfolgreich verarbeitet
http.StatusCreated 201 Neue Ressource erfolgreich erstellt
http.StatusBadRequest 400 UngĂŒltige Eingabeparameter oder fehlerhaftes Format
http.StatusNotFound 404 Ressource existiert nicht
http.StatusMethodNotAllowed 405 HTTP-Methode (z.B. POST statt GET) fĂŒr Endpoint nicht erlaubt

🧠 Diagnostischer Selbst-Check

ÜberprĂŒfe dein VerstĂ€ndnis der Kernkonzepte und typischen Go-Fallen, bevor du die Übung in der Web-IDE bearbeitest.

🎯 Aufgaben & Checkliste in aufgabe.go

💡 Unittesting von HTTP-Handlern

Mit dem Paket net/http/httptest kannst du HTTP-Handler isoliert im Speicher ohne offenen Netzwerkport testen: rec := httptest.NewRecorder() simuliert den ResponseWriter!

đŸ’» In Web-IDE öffnen → ← ZurĂŒck zu Go 12 Weiter zu Go 14: JSON APIs & Middleware →