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 关注
- 129 浏览
添加回答
举报