通过错误处理终止 HTTP 请求
在 Go 中使用 HTTP 开发 API 服务时,可能需要中止请求并返回如果不满足某些条件,则会出现错误消息。为此,可以有效地使用 ServeHTTP() 方法。
从 ServeHTTP() 返回
要终止 HTTP 请求,请从 ServeHTTP() 方法返回。通过这样做,请求将被停止,并且可以通过 fmt.Fprint(w, str) 或类似的方法发送响应。例如:
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 })
HTTP 错误代码
如果输入参数无效,则发送 HTTP 错误代码(例如,400 表示错误请求)建议使用默认 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 数据
发送回 JSON 数据以及错误码,可以使用Header().Set()方法设置Content-Type header,使用WriteHeader()方法设置HTTP状态code:
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 })
通过利用这些方法,您可以有效地终止 HTTP 请求并在必要时返回有意义的错误消息,确保您的 API 服务优雅地处理无效输入并传达错误条件正如预期的那样。
以上是如何优雅地处理并返回 Go HTTP 请求处理中的错误?的详细内容。更多信息请关注PHP中文网其他相关文章!