1 回答
TA贡献1851条经验 获得超5个赞
终止 HTTP 请求的服务无非是从ServeHTTP()方法中返回,例如:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
// examine incoming params
if !ok {
str := `{"Result":"","Error":"No valide Var"}`
fmt.Fprint(w, str)
return
}
// Do normal API serving
})
panic(http.ListenAndServe(":8080", nil))
笔记:
如果您的 API 服务的输入参数无效,您应该考虑返回 HTTP 错误代码而不是隐含的 default 200 OK。为此,您可以使用该http.Error()功能,例如:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
// examine incoming params
if !ok {
http.Error(w, `Invalid input params!`, http.StatusBadRequest)
return
}
// Do normal API serving
})
有关将 JSON 数据与错误代码一起发回的更复杂的示例:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
// examine incoming params
if !ok {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusBadRequest)
str := `{"Result":"","Error":"No valide Var"}`
fmt.Fprint(w, str)
return
}
// Do normal API serving
})
显示如何传播“返回”的示例
如果在 之外检测到错误ServeHTTP(),例如在从 调用的函数中ServeHTTP(),您必须返回此错误状态以便ServeHTTP()可以返回。
让我们假设您有以下自定义类型的所需参数和一个负责从请求中解码它们的函数:
type params struct {
// fields for your params
}
func decodeParams(r *http.Request) (*params, error) {
p := new(params)
// decode params, if they are invalid, return an error:
if !ok {
return nil, errors.New("Invalid params")
}
// If everything goes well:
return p, nil
}
使用这些:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
p, err := decodeParams(r)
if err != nil {
http.Error(w, `Invalid input params!`, http.StatusBadRequest)
return
}
// Do normal API serving
})
- 1 回答
- 0 关注
- 260 浏览
添加回答
举报