programing

http 설정 방법모든 API 엔드포인트에 대해 ResponseWriter Content-Type 헤더를 글로벌하게 사용하시겠습니까?

skycolor 2023. 3. 8. 21:00
반응형

http 설정 방법모든 API 엔드포인트에 대해 ResponseWriter Content-Type 헤더를 글로벌하게 사용하시겠습니까?

저는 Go에 처음 참여해서 간단한 API를 구축하고 있습니다.

package main

import (
    "encoding/json"
    "fmt"
    "github.com/gorilla/mux"
    "github.com/gorilla/handlers"
    "log"
    "net/http"
)

func main() {
    port := ":3000"
    var router = mux.NewRouter()
    router.HandleFunc("/m/{msg}", handleMessage).Methods("GET")
    router.HandleFunc("/n/{num}", handleNumber).Methods("GET")

    headersOk := handlers.AllowedHeaders([]string{"Authorization"})
    originsOk := handlers.AllowedOrigins([]string{"*"})
    methodsOk := handlers.AllowedMethods([]string{"GET", "POST", "OPTIONS"})

    fmt.Printf("Server is running at http://localhost%s\n", port)
    log.Fatal(http.ListenAndServe(port, handlers.CORS(originsOk, headersOk, methodsOk)(router)))
}

func handleMessage(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    message := vars["msg"]
    response := map[string]string{"message": message}
    w.Header().Set("Content-Type", "application/json") // this
    json.NewEncoder(w).Encode(response)
}

func handleNumber(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    number := vars["num"]
    response := map[string]string{"number": number}
    w.Header().Set("Content-Type", "application/json") // and this
    json.NewEncoder(w).Encode(response)
}

자꾸 반복하는 건 좀 이상한 것 같아w.Header().Set("Content-Type", "application/json")제가 가지고 있는 모든 API 함수에 줄을 긋습니다.

여기서 궁금한 것은 이 http를 설정할 수 있느냐는 것입니다.ResponseWriter Content-Type 헤더는 모든 API 함수에 대해 글로벌하게 표시됩니까?

정의할 수 있습니다.middlewaremux 라우터의 예를 다음에 나타냅니다.

func main() {
    port := ":3000"
    var router = mux.NewRouter()
    router.Use(commonMiddleware)

    router.HandleFunc("/m/{msg}", handleMessage).Methods("GET")
    router.HandleFunc("/n/{num}", handleNumber).Methods("GET")
    // rest of code goes here
}

func commonMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.Header().Add("Content-Type", "application/json")
        next.ServeHTTP(w, r)
    })
}

상세한 것에 대하여는, 메뉴얼을 참조해 주세요.

언급URL : https://stackoverflow.com/questions/51456253/how-to-set-http-responsewriter-content-type-header-globally-for-all-api-endpoint

반응형