Skip to content

Latest commit

 

History

History
178 lines (132 loc) · 8.28 KB

README_de_de.md

File metadata and controls

178 lines (132 loc) · 8.28 KB

Negroni GoDoc wercker status

Negroni ist ein Ansatz für eine idiomatische Middleware in Go. Sie ist klein, nicht-intrusiv und unterstützt die Nutzung von net/http Handlern.

Wenn Dir die Idee hinter Martini gefällt, aber Du denkst, es stecke zu viel Magie darin, dann ist Negroni eine passende Alternative.

Wo fange ich an?

Nachdem Du Go installiert und den GOPATH eingerichtet hast, erstelle eine .go-Datei. Nennen wir sie server.go.

package main

import (
  "github.com/urfave/negroni"
  "net/http"
  "fmt"
)

func main() {
  mux := http.NewServeMux()
  mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
    fmt.Fprintf(w, "Willkommen auf der Homepage!")
  })

  n := negroni.Classic()
  n.UseHandler(mux)
  n.Run(":3000")
}

Installiere nun das Negroni Package (go 1.1 und höher werden vorausgesetzt):

go get github.com/urfave/negroni

Dann starte Deinen Server:

go run server.go

Nun läuft ein net/http-Webserver von Go unter localhost:3000.

Hilfe benötigt?

Wenn Du eine Frage hast oder Dir ein bestimmte Funktion wünscht, nutze die Mailing Liste. Issues auf Github werden ausschließlich für Bug Reports und Pull Requests genutzt.

Ist Negroni ein Framework?

Negroni ist kein Framework. Es ist eine Bibliothek, geschaffen, um kompatibel mit net/http zu sein.

Routing?

Negroni ist BYOR (Bring your own Router - Nutze Deinen eigenen Router). Die Go-Community verfügt bereits über eine Vielzahl von großartigen Routern. Negroni versucht möglichst alle zu unterstützen, indem es net/http vollständig unterstützt. Beispielsweise sieht eine Implementation mit Gorilla Mux folgendermaßen aus:

router := mux.NewRouter()
router.HandleFunc("/", HomeHandler)

n := negroni.New(Middleware1, Middleware2)
// Oder nutze eine Middleware mit der Use()-Funktion
n.Use(Middleware3)
// Der Router kommt als letztes
n.UseHandler(router)

n.Run(":3000")

negroni.Classic()

negroni.Classic() stellt einige Standard-Middlewares bereit, die für die meisten Anwendungen von Nutzen ist:

  • negroni.Recovery - Middleware für Panic Recovery .
  • negroni.Logging - Anfrage/Rückmeldungs-Logging-Middleware.
  • negroni.Static - Ausliefern von statischen Dateien unter dem "public" Verzeichnis.

Dies macht es wirklich einfach, mit den nützlichen Funktionen von Negroni zu starten.

Handlers

Negroni stellt einen bidirektionalen Middleware-Flow bereit. Dies wird durch das negroni.Handler-Interface erreicht:

type Handler interface {
  ServeHTTP(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc)
}

Wenn eine Middleware nicht bereits den ResponseWriter genutzt hat, sollte sie die nächste http.HandlerFunc in der Verkettung von Middlewares aufrufen und diese ausführen. Das kann von großem Nutzen sein:

func MyMiddleware(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
  // Mache etwas vor dem Aufruf
  next(rw, r)
  // Mache etwas nach dem Aufruf
}

Und Du kannst eine Middleware durch die Use-Funktion der Verkettung von Middlewares zuordnen.

n := negroni.New()
n.Use(negroni.HandlerFunc(MyMiddleware))

Stattdessen kannst Du auch herkömmliche http.Handler zuordnen:

n := negroni.New()

mux := http.NewServeMux()
// Ordne Deine Routen zu

n.UseHandler(mux)

n.Run(":3000")

Run()

Negroni hat eine nützliche Funktion namens Run. Run übernimmt eine Zeichenkette addr ähnlich wie http.ListenAndServe.

n := negroni.Classic()
// ...
log.Fatal(http.ListenAndServe(":8080", n))

Routenspezifische Middleware

Wenn Du eine Gruppe von Routen hast, welche alle die gleiche Middleware ausführen müssen, kannst Du einfach eine neue Negroni-Instanz erstellen und sie als Route-Handler nutzen:

router := mux.NewRouter()
adminRoutes := mux.NewRouter()
// Füge die Admin-Routen hier hinzu

// Erstelle eine neue Negroni-Instanz für die Admin-Middleware
router.Handle("/admin", negroni.New(
  Middleware1,
  Middleware2,
  negroni.Wrap(adminRoutes),
))

Middlewares von Dritten

Hier ist eine aktuelle Liste von Middlewares, die kompatible mit Negroni sind. Tue Dir keinen Zwang an, Dich einzutragen, wenn Du selbst eine Middleware programmiert hast:

Middleware Autor Beschreibung
authz Yang Luo ACL, RBAC, ABAC Authorization middlware based on Casbin
RestGate Prasanga Siripala Sichere Authentifikation für Endpunkte einer REST API
Graceful Tyler Bunnell Graceful HTTP Shutdown
secure Cory Jacobsen Eine Middleware mit ein paar nützlichen Sicherheitseinstellungen
JWT Middleware Auth0 Eine Middleware die nach JWTs im Authorization-Feld des Header sucht und sie dekodiert.
binding Matt Holt Data Binding von HTTP-Anfragen in Structs
logrus Dan Buch Logrus-basierender Logger
render Cory Jacobsen Rendere JSON, XML und HTML Vorlagen
gorelic Jingwen Owen Ou New Relic Agent für die Go-Echtzeitumgebung
gzip phyber Kompression von HTTP-Rückmeldungen via GZIP
oauth2 David Bochenski oAuth2 Middleware
sessions David Bochenski Session Management
permissions2 Alexander Rødseth Cookies, Benutzer und Berechtigungen
onthefly Alexander Rødseth Generiere TinySVG, HTML und CSS spontan
cors Olivier Poitrey Cross Origin Resource Sharing (CORS) Unterstützung
xrequestid Andrea Franz Eine Middleware die zufällige X-Request-Id-Header jedem Request anfügt
VanGoH Taylor Wrobel Configurable AWS-Style HMAC-basierte Middleware zur Authentifikation
stats Florent Messa Speichere wichtige Informationen über Deine Webanwendung (Reaktionszeit, etc.)

Beispiele

Alexander Rødseth programmierte mooseware, ein Grundgerüst zum Erstellen von Negroni Middleware-Handerln.

Aktualisieren in Echtzeit?

gin und fresh aktualisieren Deine Negroni-Anwendung automatisch.

Unverzichbare Informationen für Go- & Negronineulinge

Über das Projekt

Negroni wurde obsseziv von Niemand gerigeren als dem Code Gangsta entwickelt.