You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6.8 KiB

Negroni GoDoc wercker status

Negroni é uma abordagem idiomática para middleware web em Go. É pequeno, não intrusivo, e incentiva uso da biblioteca net/http.

Se gosta da idéia do Martini, mas acha que contém muita mágica, então Negroni é ideal.

Começando

Depois de instalar Go e definir seu GOPATH, criar seu primeirto arquivo .go. Iremos chamá-lo server.go.

package main

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

func main() {
  mux := http.NewServeMux()
  mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
    fmt.Fprintf(w, "Welcome to the home page!")
  })

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

Depois instale o pacote Negroni (go 1.1 ou superior)

go get github.com/codegangsta/negroni

Depois execute seu servidor:

go run server.go

Agora terá um servidor web Go net/http rodando em localhost:3000.

Precisa de Ajuda?

Se você tem uma pergunta ou pedido de recurso,go ask the mailing list. O Github issues para o Negroni será usado exclusivamente para Reportar bugs e pull requests.

Negroni é um Framework?

Negroni não é a framework. É uma biblioteca que é desenhada para trabalhar diretamente com net/http.

Roteamento?

Negroni é TSPR(Traga seu próprio Roteamento). A comunidade Go já tem um grande número de roteadores http disponíveis, Negroni tenta rodar bem com todos eles pelo suporte total net/http/ Por exemplo, a integração com Gorilla Mux se parece com isso:

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

n := negroni.New(Middleware1, Middleware2)
// Or use a middleware with the Use() function
n.Use(Middleware3)
// router goes last
n.UseHandler(router)

n.Run(":3000")

negroni.Classic()

negroni.Classic() fornece alguns middlewares padrão que são úteis para maioria das aplicações:

  • negroni.Recovery - Panic Recovery Middleware.
  • negroni.Logging - Request/Response Logging Middleware.
  • negroni.Static - Static File serving under the "public" directory.

Isso torna muito fácil começar com alguns recursos úteis do Negroni.

Handlers

Negroni fornece um middleware de fluxo bidirecional. Isso é feito através da interface negroni.Handler:

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

Se um middleware não tenha escrito o ResponseWriter, ele deve chamar a próxima http.HandlerFunc na cadeia para produzir o próximo handler middleware. Isso pode ser usado muito bem:

func MyMiddleware(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
  // do some stuff before
  next(rw, r)
  // do some stuff after
}

E pode mapear isso para a cadeia de handler com a função Use:

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

Você também pode mapear http.Handler antigos:

n := negroni.New()

mux := http.NewServeMux()
// map your routes

n.UseHandler(mux)

n.Run(":3000")

Run()

Negroni tem uma função de conveniência chamada Run. Run pega um endereço de string idêntico para http.ListenAndServe.

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

Middleware para Rotas Específicas

Se você tem um grupo de rota com rotas que precisam ser executadas por um middleware específico, pode simplesmente criar uma nova instância de Negroni e usar no seu Manipulador de rota.

router := mux.NewRouter()
adminRoutes := mux.NewRouter()
// add admin routes here

// Criar um middleware negroni para admin
router.Handle("/admin", negroni.New(
  Middleware1,
  Middleware2,
  negroni.Wrap(adminRoutes),
))

Middleware de Terceiros

Aqui está uma lista atual de Middleware Compatíveis com Negroni. Sinta se livre para mandar um PR vinculando seu middleware se construiu um:

Middleware Autor Descrição
Graceful Tyler Bunnell Graceful HTTP Shutdown
secure Cory Jacobsen Implementa rapidamente itens de segurança.
binding Matt Holt Handler para mapeamento/validação de um request a estrutura.
logrus Dan Buch Logrus-based logger
render Cory Jacobsen Pacote para renderizar JSON, XML, e templates HTML.
gorelic Jingwen Owen Ou New Relic agent for Go runtime
gzip phyber Handler para adicionar compreção gzip para as requisições
oauth2 David Bochenski Handler que prove sistema de login OAuth 2.0 para aplicações Martini. Google Sign-in, Facebook Connect e Github login são suportados.
sessions David Bochenski Handler que provê o serviço de sessão.
permissions Alexander Rødseth Cookies, usuários e permissões.
onthefly Alexander Rødseth Pacote para gerar TinySVG, HTML e CSS em tempo real.

Exemplos

Alexander Rødseth criou mooseware, uma estrutura para escrever um handler middleware Negroni.

Servidor com autoreload?

gin e fresh são aplicativos para autoreload do Negroni.

Leitura Essencial para Iniciantes em Go & Negroni

Sobre

Negroni é obsessivamente desenhado por ninguém menos que Code Gangsta