Gestion des 404 avec le routeur HTTP
La bibliothèque du routeur HTTP fournit des capacités de routage robustes pour le développement d'API. Une tâche courante consiste à gérer les réponses 404 (introuvable). Bien que la documentation mentionne brièvement la possibilité de définir un gestionnaire 404 personnalisé, les détails d'implémentation peuvent prêter à confusion.
Comprendre l'interface du gestionnaire personnalisé
La structure httprouter.Router contient un champ nommé NotFound, qui est une interface http.Handler. Cette interface définit une seule méthode, ServeHTTP(), qui prend un ResponseWriter et une Request comme arguments.
Création d'un gestionnaire 404 personnalisé
Pour créer un gestionnaire 404 personnalisé , définissez une fonction avec la signature de la méthode ServeHTTP() et utilisez la fonction d'assistance http.HandlerFunc() pour la convertir en une valeur http.Handler.
Exemple d'implémentation :
<code class="go">func MyNotFound(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/plain; charset=utf-8") w.WriteHeader(http.StatusNotFound) // StatusNotFound = 404 w.Write([]byte("My own Not Found handler.")) w.Write([]byte(" The page you requested could not be found.")) }</code>
Définition du gestionnaire personnalisé
Ensuite, attribuez votre gestionnaire personnalisé au champ NotFound de l'objet Routeur HTTP :
<code class="go">router := httprouter.New() router.NotFound = http.HandlerFunc(MyNotFound)</code>
Manuel Invocation du gestionnaire personnalisé
Si jamais vous devez invoquer manuellement votre gestionnaire 404 personnalisé à partir d'un autre gestionnaire HTTP, vous pouvez le faire en lui transmettant un ResponseWriter et une Request :
<code class="go">func ResourceHandler(w http.ResponseWriter, r *http.Request) { exists := ... // Check for resource existence if !exists { MyNotFound(w, r) // Pass ResponseWriter and Request return } // Resource exists, serve it // ... }</code>
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!