Skip to content

Latest commit

 

History

History
186 lines (140 loc) · 9.68 KB

README_de_de.md

File metadata and controls

186 lines (140 loc) · 9.68 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
binding Matt Holt Data binding from HTTP requests into structs
cloudwatch Colin Steele AWS cloudwatch metrics middleware
cors Olivier Poitrey Cross Origin Resource Sharing (CORS) support
csp Awake Networks Content Security Policy (CSP) support
delay Jeff Martinez Add delays/latency to endpoints. Useful when testing effects of high latency
New Relic Go Agent Yadvendar Champawat Official New Relic Go Agent (currently in beta)
gorelic Jingwen Owen Ou New Relic agent for Go runtime
Graceful Tyler Bunnell Graceful HTTP Shutdown
gzip phyber GZIP response compression
JWT Middleware Auth0 Middleware checks for a JWT on the Authorization header on incoming requests and decodes it
logrus Dan Buch Logrus-based logger
oauth2 David Bochenski oAuth2 middleware
onthefly Alexander Rødseth Generate TinySVG, HTML and CSS on the fly
permissions2 Alexander Rødseth Cookies, users and permissions
prometheus Rene Zbinden Easily create metrics endpoint for the prometheus instrumentation tool
render Cory Jacobsen Render JSON, XML and HTML templates
RestGate Prasanga Siripala Secure authentication for REST API endpoints
secure Cory Jacobsen Middleware that implements a few quick security wins
sessions David Bochenski Session Management
stats Florent Messa Store information about your web application (response time, etc.)
VanGoH Taylor Wrobel Configurable AWS-Style HMAC authentication middleware
xrequestid Andrea Franz Middleware that assigns a random X-Request-Id header to each request
mgo session Joel James Middleware that handles creating and closing mgo sessions per request
digits Bilal Amarni Middleware that handles Twitter Digits authentication
stats Chirag Gupta Middleware that manages qps and latency stats for your endpoints and asynchronously flushes them to influx db

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.