1 回答

TA貢獻1773條經驗 獲得超3個贊
雖然這是一個代碼審查問題并且應該在 CodeReview 社區中,但我會嘗試回答它。
編寫一個處理 HTML 和 JSON 渲染的通用函數。即使您重復某些代碼,錯誤處理 IMO 也應該在每個處理程序上發生。它在那里更有意義,并使代碼更具可讀性和明確性。您很快就會發現還有其他錯誤需要特殊處理。
從邏輯上來說,大多數API都接受查詢參數http://api.com/user/1?fomtat=json。這更有意義,因為當客戶端接受多種內容類型時,您就會陷入困境。
const JSON = "application/json"
func getUser(w http.ResponseWriter, r *http.Request) {
u, err := _getUser(r)
if err != nil {
http.NotFound(w, r)
return
}
responseBody(u, r.Header.Get("Content-type"), &w)
}
func responseBody(u User, contentType string, w io.writer) {
switch contentType {
case JSON:
w.Header().Set("Content-Type", JSON)
json.NewEncoder(w).Encode(u) //asked for json, return json
default:
w.Header().Set("Content-Type", "text/html")
renderTemplate(w, "view", u) // asked for html, return html
}
}
- 1 回答
- 0 關注
- 175 瀏覽
添加回答
舉報