终止或中止 HTTP 请求

用一些错误消息中止我的API服务的方法是什么?


调用我的服务的链接:


http://creative.test.spoti.io/api/getVastPlayer?add=

    {"Json":Json}&host=api0.spoti.io&domain=domain&userAgent=userAgent&mobile=true

要调用我的服务,客户端需要发送一个 Json 和一些参数。


我想测试我得到的参数是否正确,如果不正确,我想发送一条错误消息。


响应应该是一个 Json 代码 {"Result":"Result","Error":"error message"}


我试过了log.fatal,os.Exit(1)他们停止了服务,而不仅仅是呼叫请求。panic中止呼叫,但它阻止我发送http.ResponseWriter错误消息。


我读了一些关于恐慌、延迟、恢复的内容,但我真的不知道如何使用它们来解决这个问题。


return 作品:


mobile :=query.Get("mobile")

if mobile=="mobile" {

            str:=`{"Resultt":"","Error":"No valide Var"}`

            fmt.Fprint(w, str)      

            fmt.Println("No successfull Operation!!")

            return}  

但是我只能在 main 函数中使用它,因为在其他函数中它只退出 func 而不是调用者函数(请求)。


慕尼黑8549860
浏览 266回答 1
1回答

江户川乱折腾

终止 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})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go