Hinzufügen von Protokollierungs- und Fehlerbehandlungs-Middleware zu Ihrer Go-API

Patricia Arquette
Freigeben: 2024-10-05 14:07:02
Original
432 Leute haben es durchsucht

Adding Logging and Error Handling Middleware to Your 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? ?

Middleware ist wie ein Türsteher in Ihrem Lieblingsclub – sie fängt Anfragen ab, bevor sie Ihre API-Endpunkte erreichen. Sie können über Middleware verfügen, die die Authentifizierung überprüft (wie wir es mit JWT getan haben), Informationen protokolliert oder Fehler behandelt, wenn etwas schief geht.

Heute werden wir Middleware erstellen, die:

  • Protokolle: Jede eingehende Anfrage, damit wir wissen, wer an die Tür unserer API klopft.
  • Behandelt Fehler: Elegant, damit Ihre Benutzer diese hässlichen 500 Fehler nicht sehen.
Lass uns eintauchen!


Schritt 1: Erstellen einer Protokollierungs-Middleware?

Die Protokollierung ist Ihr bester Freund, wenn es um das Debuggen und Verstehen der Vorgänge in Ihrer API geht. Wir werden eine Middleware erstellen, die jede eingehende Anfrage protokolliert – Methode, URL und benötigte Zeit.


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))
    })
}


Nach dem Login kopieren
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?

Reden wir über Fehler. Fehler passieren, oder? Aber anstatt zuzulassen, dass sie einen Absturz verursachen oder eine vage Fehlermeldung senden, gehen wir lieber vorsichtig damit um.


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)
    })
}


Nach dem Login kopieren

Schritt 3: Middleware in Ihre API integrieren?

Nachdem wir nun unsere Protokollierungs- und Fehlerbehandlungs-Middleware erstellt haben, verbinden wir sie mit unserer API. Wir wenden sie global an, sodass jede Anfrage protokolliert und Fehler abgefangen werden.


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))
}


Nach dem Login kopieren

Schritt 4: Ausprobieren?

Um sicherzustellen, dass alles funktioniert, starten Sie Ihre API:


go run main.go


Nach dem Login kopieren
Versuchen 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.2ms


Nach dem Login kopieren
Und wenn es einen Fehler gibt, sehen Sie:


Error occurred: some error details


Nach dem Login kopieren
Deinem Benutzer wird jedoch nur die saubere Meldung „500 Internal Server Error“ angezeigt. ?


Warum ist das wichtig?

  1. 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.

  2. 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.


Was kommt als nächstes?

Nächstes Mal werden wir die Dinge auf die nächste Ebene bringen und

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!