透過錯誤處理終止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中文網其他相關文章!