Maison > Article > développement back-end > Comment enregistrer efficacement les données de requête et de réponse HTTP dans les API Go ?
Consignation des données de requête et de réponse HTTP
Lors du développement d'API Web dans Go, la journalisation de la requête HTTP entrante et de la réponse HTTP sortante est cruciale pour la surveillance et le débogage. Cependant, l'interface http.ResponseWriter par défaut ne fournit pas un moyen pratique de capturer les données de réponse une fois qu'elles ont été écrites.
Capture des données de réponse à l'aide de io.MultiWriter
Une solution consiste à utiliser la fonction io.MultiWriter pour créer un rédacteur qui duplique ses écritures vers plusieurs destinations. Cela vous permet d'enregistrer la réponse tout en l'envoyant au client.
<code class="go">func api1(w http.ResponseWriter, req *http.Request) { var log bytes.Buffer rsp := io.MultiWriter(w, &log) // Subsequent writes to rsp will be duplicated to both w and log ... }</code>
Capture des données de requête à l'aide de io.TeeReader
Pour capturer le corps de la requête HTTP entrante pour la journalisation, vous pouvez utiliser la fonction io.TeeReader pour créer un lecteur qui lit le corps de la requête d'origine tout en écrivant également dans un tampon séparé.
<code class="go">func api1(w http.ResponseWriter, req *http.Request) { var log bytes.Buffer tee := io.TeeReader(req.Body, &log) err := json.NewDecoder(tee).Decode(&requestData) ... }</code>
Combinaison des données de requête et de réponse pour la journalisation
Avec les données de requête et de réponse capturées dans leurs tampons respectifs, vous pouvez désormais les combiner en un seul message de journal.
<code class="go">// Assuming we have set up log to be a logger with desired format and output log.Printf("%s %s %d %s %s", req.Method, req.URL.Path, req.Proto, log.BufioReader, log.Bytes())</code>
En combinant ces techniques, vous pouvez capturer efficacement et enregistrez à la fois les données de requête HTTP entrante et de réponse HTTP sortante, fournissant ainsi des informations précieuses pour le dépannage et la surveillance de votre API.
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!