robert-min / project-go

Go 언어 리뷰와 기존에 파이썬으로 진행했던 프로젝트를 Go 언어로 개선한 repo
0 stars 0 forks source link

go rest-api 리뷰 #2

Open robert-min opened 1 year ago

robert-min commented 1 year ago

gorilla/mux를 활용한 rest-api 개발

gorilla/mux 링크

# 패키지 설치
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

negroni를 활용한 코드 개선

// 설치
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)
}