Open robert-min opened 1 year ago
mux
http.Handler
http.ServeMux
reversed
# 패키지 설치 go get github.com/gorilla/mux
// api/app.go package api import ( "fmt" "net/http" "github.com/gorilla/mux" ) func getHello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "say hello") } func MakeHandler() *mux.Router { mux := mux.NewRouter() mux.HandleFunc("/hello", getHello).Methods("GET") return mux } // main.go package main import ( "net/http" "project-go/login-api/backend/src/api" ) func main() { router := api.MakeHandler() http.ListenAndServe(":8080", router) }
# 실행 후 GET http://localhost:8080/hello 요청 후 결과 확인 go run main.go
net/http
negroni.Recovery
negroni.Logger
negroni.Static
// 설치 go get github.com/urfave/negroni
// api/app.go package api import ( "fmt" "net/http" "github.com/gorilla/mux" "github.com/urfave/negroni" ) type AppHandler struct { http.Handler } func (a *AppHandler) getHello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "say hello") } func MakeHandler() *AppHandler { mux := mux.NewRouter() n := negroni.New( negroni.NewLogger(), // Request/Response 로깅 미들웨어 negroni.NewRecovery(), // panic 복구용 미들웨어 ) n.UseHandler(mux) a := &AppHandler{ Handler: n, } mux.HandleFunc("/hello", a.getHello).Methods("GET") return a } // main.go package main import ( "net/http" "project-go/login-api/backend/src/api" ) func main() { m := api.MakeHandler() http.ListenAndServe(":8080", m) }
gorilla/mux를 활용한 rest-api 개발
gorilla/mux 링크
mux
는 "HTTP 요청 멀티플래서"를 의미하며 해당 패키지를 통해 들어오는 요청을 해당 핸들러와 일치시키기위해 라우터 및 디스패처를 구현http.Handler
표준과 호환되도록 인터페이스를 구현http.ServeMux
.reversed
기능 제공negroni를 활용한 코드 개선
net/http
와 같이 사용할 수 있는 HTTP 미드웨어negroni.Recovery
- Panic 복구용 미들웨어negroni.Logger
- Request/Response 로깅 미들웨어negroni.Static
- "public" 디렉터리 아래의 정적 파일 제공(serving)을 위한 미들웨어