Heim >Backend-Entwicklung >Golang >Hinzufügen von Protokollierungs- und Fehlerbehandlungs-Middleware zu Ihrer Go-API
Kurze Anmerkung: Wenn Sie meinen vorherigen Beitrag zur JWT-Authentifizierung gelesen haben und einige Rendering-Probleme bemerkt haben, wurden diese jetzt behoben! Sehen Sie sich das Ganze unbedingt noch einmal an, denn diese Beispiele bauen auf diesem Tutorial auf. :)
Okay Leute, wir haben unsere Go-API am Laufen, wir haben die JWT-Authentifizierung hinzugefügt und wir haben sie sogar mit einer PostgreSQL-Datenbank verbunden. Aber wir sind noch nicht fertig! Diese Woche werden wir noch einen Schritt weiter gehen und unsere API intelligenter und entwicklerfreundlicher machen, indem wir benutzerdefinierte Middleware für Protokollierung und Fehlerbehandlung.
Was ist nochmal Middleware? ?Heute werden wir Middleware erstellen, die:
func loggingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() // Log the method and the requested URL log.Printf("Started %s %s", r.Method, r.URL.Path) // Call the next handler in the chain next.ServeHTTP(w, r) // Log how long it took log.Printf("Completed in %v", time.Since(start)) }) }Für diejenigen, die tiefer in die Protokollierungs-Middleware eintauchen möchten, empfehle ich einen Blick auf Matt Silverlocks fantastischen Leitfaden zum Schreiben von Protokollierungs-Middleware in Go. Er erklärt, wie wiederverwendbare Middleware für verschiedene Anwendungsfälle wie Authentifizierung, Nachverfolgung und natürlich Protokollierung strukturiert werden kann!
Schritt 2: Fehlerbehandlungs-Middleware?
func errorHandlingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { defer func() { if err := recover(); err != nil { // Log the error and send a user-friendly message log.Printf("Error occurred: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } }() next.ServeHTTP(w, r) }) }
func main() { db = connectDB() defer db.Close() r := mux.NewRouter() // Apply middleware globally r.Use(loggingMiddleware) r.Use(errorHandlingMiddleware) r.HandleFunc("/login", login).Methods("POST") r.Handle("/books", authenticate(http.HandlerFunc(getBooks))).Methods("GET") r.Handle("/books", authenticate(http.HandlerFunc(createBook))).Methods("POST") fmt.Println("Server started on port :8000") log.Fatal(http.ListenAndServe(":8000", r)) }
go run main.goVersuchen Sie nun, einen Ihrer Endpunkte (wie /books) zu erreichen und überprüfen Sie Ihr Terminal. Sie sollten Protokolle wie:
sehen
Started GET /books Completed in 1.2msUnd wenn es einen Fehler gibt, sehen Sie:
Error occurred: some error detailsDeinem Benutzer wird jedoch nur die saubere Meldung „500 Internal Server Error“ angezeigt. ?
Protokollierung hilft Ihnen, Fehler aufzuspüren und das Verhalten Ihrer API zu überwachen. Wenn etwas schief geht, wissen Sie genau, welcher Endpunkt getroffen wurde und wie lange die Anfrage gedauert hat.
Fehlerbehandlung verhindert, dass Ihre API abstürzt, wenn etwas Unerwartetes passiert. Stattdessen wird die Wiederherstellung ordnungsgemäß durchgeführt und eine saubere Fehlermeldung an den Client gesendet.
unsere Go-API andocken! Dadurch wird Ihre App portabel und kann auf jedem Computer oder Cloud-Dienst bereitgestellt werden. Machen Sie sich bereit für etwas Containermagie! ?
Das obige ist der detaillierte Inhalt vonHinzufügen von Protokollierungs- und Fehlerbehandlungs-Middleware zu Ihrer Go-API. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!