Terminer une requête HTTP avec gestion des erreurs
Lors du développement de services API utilisant HTTP dans Go, il peut être nécessaire d'abandonner une requête et de revenir un message d'erreur si certaines conditions ne sont pas remplies. Pour y parvenir, la méthode ServeHTTP() peut être utilisée efficacement.
Retour de ServeHTTP()
Pour terminer une requête HTTP, retour de la méthode ServeHTTP() . Ce faisant, la demande sera interrompue et une réponse pourra être envoyée via fmt.Fprint(w, str) ou des méthodes similaires. Par exemple :
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 })
Codes d'erreur HTTP
Dans les cas où les paramètres d'entrée ne sont pas valides, envoyer un code d'erreur HTTP (par exemple, 400 pour une requête incorrecte) à la place de la valeur par défaut 200 OK est recommandée. La fonction http.Error() peut être utilisée à cet effet :
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 })
Renvoyer des données JSON avec un code d'erreur
Pour renvoyer des données JSON accompagnées d'un code d'erreur, la méthode Header().Set() peut être utilisée pour définir l'en-tête Content-Type et la méthode WriteHeader() peut être utilisée pour définir l'état 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 })
Propagation Returning
Lorsque l'erreur est détectée en dehors de ServeHTTP(), l'état d'erreur doit être propagé pour que ServeHTTP() puisse revenir. Une approche simple consiste à renvoyer l'erreur de la fonction interne, ce qui entraînera également le retour de la méthode ServeHTTP(). Par exemple, avec un type de paramètres personnalisés :
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 })
En utilisant ces approches, vous pouvez mettre fin efficacement aux requêtes HTTP et renvoyer des messages d'erreur significatifs si nécessaire, garantissant ainsi que vos services API gèrent correctement les entrées non valides et communiquent les conditions d'erreur. comme prévu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!