Maison  >  Article  >  développement back-end  >  Comment enregistrer les réponses HTTP dans Go avec le chaînage middleware ?

Comment enregistrer les réponses HTTP dans Go avec le chaînage middleware ?

DDD
DDDoriginal
2024-10-28 08:55:29127parcourir

How to Log HTTP Responses in Go with Middleware Chaining?

Consignation des réponses aux requêtes HTTP entrantes dans http.HandleFunc

En réponse à la question posée dans un fil de discussion précédent, cet article propose de consigner les réponses HTTP des serveurs live sans recourir à de fausses demandes. L'objectif est de capturer à la fois les en-têtes et les charges utiles JSON pour une analyse approfondie.

En utilisant le concept de chaînage middleware, nous pouvons créer un gestionnaire HTTP personnalisé qui intercepte les réponses et enregistre les informations pertinentes. Voici comment :

Approche de chaînage de middleware

Avec le chaînage de middleware, vous définissez des fonctions de middleware qui peuvent s'exécuter avant ou après la fonction de gestionnaire principal. Ces middlewares peuvent effectuer diverses tâches telles que la journalisation, la validation ou les contrôles de sécurité.

Implémentation de combinateurs de gestionnaires fonctionnels

Au lieu de solutions Negroni magiques, nous pouvons définir nos propres combinateurs de gestionnaires fonctionnels. Chaque combinateur gère une tâche spécifique et peut être combiné pour former une chaîne d'exécution. Par exemple, vous pouvez créer un combinateur pour la journalisation des réponses :

<code class="go">func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // Replace response writer with a recorder for subsequent handlers
        c := httptest.NewRecorder()
        next(c, r)

        // Copy response from recorder to actual response writer
        for k, v := range c.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(c.Code)
        c.Body.WriteTo(w)
    }
}</code>

Gestion des chaînes de middleware

Pour appliquer le middleware de journalisation à tous les gestionnaires d'une catégorie spécifique, nous pouvons créer un gestionnaire par défaut :

<code class="go">func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
    return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}</code>

Ce combinateur garantit que toutes les chaînes créées via NewDefaultHandler incluront la journalisation des réponses ainsi que toute autre fonctionnalité par défaut définie dans NewOtherStuffHandler.

En tirant parti de ces techniques, vous pouvez enregistrer de manière transparente les réponses HTTP de votre service Web en direct, fournissant des informations précieuses pour le débogage et l'analyse.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn