Maison > Article > développement back-end > Comment enregistrer les réponses HTTP en temps réel avec « http.HandleFunc » et un middleware ?
Dans notre discussion précédente, nous avons exploré l'inspection des réponses HTTP à l'aide d'une fausse requête, une technique adaptée aux tests unitaires. Cependant, nous cherchons également un moyen d'enregistrer les données de réponse en temps réel sur un serveur en direct.
Une approche répandue consiste à créer une chaîne de middleware. Les bibliothèques comme Negroni offrent des fonctionnalités middleware, dans lesquelles les gestionnaires sont combinés et exécutés séquentiellement. Une implémentation minimale de middleware peut être réalisée à l'aide de combinateurs de gestionnaires :
<code class="go">func NewFooHandler(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // Do pre-handling tasks next(w, r) // Do post-handling tasks } }</code>
Ces combinateurs peuvent ensuite être chaînés pour former un gestionnaire :
<code class="go">h := NewFooHandler(NewBarHandler(NewBazHandler(Sink)))</code>
Pour appliquer cette technique à votre problème, vous pouvez créer un combinateur de gestionnaire :
<code class="go">func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // Record the response c := httptest.NewRecorder() next(c, r) // Copy responses for k, v := range c.HeaderMap { w.Header()[k] = v } w.WriteHeader(c.Code) c.Body.WriteTo(w) } }</code>
Maintenant, vous pouvez créer un gestionnaire par défaut qui combine des gestionnaires personnalisés avec la journalisation des réponses :
<code class="go">func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc { return NewResponseLoggingHandler(NewOtherStuffHandler(next)) }</code>
En utilisant ce gestionnaire par défaut :
<code class="go">h := NewDefaultHandler(...)</code>
Tous les gestionnaires suivants incluront automatiquement la journalisation des réponses.
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!