Maison > développement back-end > Golang > le corps du texte

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

DDD
Libérer: 2024-10-28 08:55:29
original
127 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!