Go HTTP Middleware erklärt

Hören Sie auf, denselben Code in jeden einzelnen Handler zu kopieren und einzufügen.

Wenn Sie die Authentifizierung prüfen, die Dauer einer Anfrage protokollieren oder jeder Anfrage eine eindeutige ID hinzufügen müssen, schreiben Sie diese Logik nicht in Ihre Business-Handler. Wenn Sie 20 Handler haben, müssen Sie 20 Stellen aktualisieren, sobald sich Ihre Authentifizierungslogik ändert. Das ist ein Wartungsalbtraum.

Middleware löst dieses Problem. Sie schreiben die Logik einmal. Sie umschließen Ihre Handler. Sie müssen sie nie wieder anfassen.

Was ist Middleware?

In Go ist Middleware eine Funktion, die: • Einen http.Handler akzeptiert. • Einen neuen http.Handler zurückgibt. • Aktionen ausführt, bevor oder nachdem der ursprüngliche Handler ausgeführt wird.

Stellen Sie es sich wie eine Zwiebel vor. Jede Schicht umschließt die nächste. Die Anfrage durchläuft jede Schicht auf dem Weg hinein. Die Antwort durchläuft jede Schicht auf dem Weg hinaus.

Das werden Sie lernen:

• Die Grundlagen des http.Handler-Interfaces. • Wie man eigene Middleware von Grund auf erstellt. • Wie man mehrere Schichten miteinander verknüpft. • Wie man Daten mithilfe von context durch die Kette reicht. • Fortgeschrittene Tipps wie die Reihenfolge und Panic Recovery.

Wichtigste Erkenntnisse:

• Die Reihenfolge ist entscheidend. Wenn eine Middleware einen Wert im Context setzt, muss die nächste Middleware in der Kette derjenige sein, der ihn liest. Wenn Sie die Reihenfolge vertauschen, wird der Wert leer sein.

• Geben Sie nach einem vorzeitigen Abbruch immer return zurück. Wenn Sie einen Fehler finden und http.Error senden, rufen Sie sofort return auf. Wenn Sie next.ServeHTTP aufrufen, nachdem Sie einen Fehler gesendet haben, wird Ihr Server eine Panic auslösen.

• Verwenden Sie benutzerdefinierte Typen für Context-Keys. Verwenden Sie keine einfachen Strings als Keys. Dies verhindert, dass verschiedene Pakete die Daten des jeweils anderen überschreiben.

• Verwenden Sie einen Wrapper, um Daten zu erfassen. Da der Standard-http.ResponseWriter es nicht zulässt, den Statuscode nach dem Schreiben auszulesen, müssen Sie eine benutzerdefinierte Struktur erstellen, um ihn abzufangen und für Ihre Logs zu speichern.

Meistern Sie diese Muster, um ein solides Fundament für Ihre Go HTTP-Server zu schaffen.

Quelle: https://dev.to/ferztyle/go-http-middleware-explained-what-it-is-how-it-works-and-how-to-build-your-own-1ma7