
RabbitMQ, des bases à la maîtrise (Partie 1)
Rabbitmq est un message broker très complet et robuste, c'est pourquoi le comprendre et l'utiliser est assez simple. En revanche, le maîtriser l'est un peu moins...
Sommaire
Dans le monde du développement web en Go, la gestion efficace des requêtes HTTP est cruciale.
Les middlewares/tripperware jouent un rôle central dans cette gestion en permettant d'intercepter, de modifier et d'enrichir les requêtes et les réponses HTTP.
C'est dans ce contexte que la librairie httpware
s'impose comme une solution élégante et puissante.
Si vous êtes familier avec des librairies populaires comme justinas/alice
ou gorilla/handlers
, vous retrouverez des fonctionnalités similaires dans httpware.
Cependant, ce qui distingue véritablement cette librairie, c'est son support natif des tripperware
- des middlewares - côté client.
Cette fonctionnalité unique permet d'appliquer les mêmes principes de middleware tant au niveau du serveur que du client HTTP, offrant ainsi une solution complète et cohérente pour la gestion des requêtes HTTP dans votre application.
Développée pour simplifier l'implémentation des middlewares/tripperware en Go, cette librairie offre un ensemble d'outils prêts à l'emploi tout en restant flexible et légère. Elle répond particulièrement aux besoins de traçabilité, de sécurisation et de manipulation des requêtes HTTP dans les applications modernes.
Découvrons cela ensemble.
En Go, un middleware est essentiellement une fonction qui encapsule un handler HTTP.
La signature type est la suivante :
type Middleware func(http.Handler) http.Handler
Cette approche permet d'empiler plusieurs middlewares de manière élégante. Httpware s'appuie sur ce principe fondamental tout en l'enrichissant.
L'appellation tripperware
est dérivée de l'interface GO http.RoundTripper
utilisée par le client HTTP de GO.
La signature type est la suivante :
type Tripperware func(http.RoundTripper) http.RoundTripper
De la même manière que pour les middlewares il est possible d'empiler plusieurs tripperwares de manière élégante.
La librairie s'articule autour de deux concepts clés :
Name | Middleware | Tripperware |
---|---|---|
Authentication | X | |
AuthenticationForwarder | X | |
CorrelationId | X | X |
Metrics | X | X |
Interceptor | X | X |
Skip | X | X |
Enable | X | X |
RateLimiter | X | X |
RequestListener | X | X |
CurlLogDumper | X | X |
Voici par exemple un server HTTP qui va logguer toutes les requêtes reçus (http://localhost:8080/*) au format curl :
package main
import (
"github.com/gol4ng/httpware/v4"
"github.com/gol4ng/httpware/v4/middleware"
"github.com/gol4ng/httpware/v4/request_listener"
"net/http"
)
func main() {
http.ListenAndServe(
":8080",
middleware.RequestListener(request_listener.CurlLogDumper)(httpware.NopHandler),
)
}
Cet autre exemple ajoute un CorrelationID sur la requête et possède un rate limiter HTTP
package main
import (
"github.com/gol4ng/httpware/v4"
"github.com/gol4ng/httpware/v4/middleware"
"github.com/gol4ng/httpware/v4/rate_limit"
"net/http"
"time"
)
func main() {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
})
limiter := rate_limit.NewTokenBucket(1*time.Minute, 20)
defer limiter.Stop()
stack := httpware.MiddlewareStack(
middleware.CorrelationId(), // ID de corrélation
middleware.RateLimit(limiter),// RateLimiting
)
http.ListenAndServe(":8080", stack.DecorateHandler(handler))
}
Voici un exemple de middleware personnalisé qui mesure le temps de réponse :
func TimingMiddleware() httpware.Middleware {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
defer func() {
duration := time.Since(start)
log.Printf("Request processed in %v", duration)
}()
next.ServeHTTP(w, r)
})
}
}
func ContextAwareMiddleware() httpware.Middleware {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
// Enrichir le contexte
ctx = context.WithValue(ctx, "key", "value")
next.ServeHTTP(w, r.WithContext(ctx))
})
}
}
Httpware se distingue d'autres solutions comme Gorilla Handlers par :
Httpware est une solution robuste et élégante pour la gestion des middlewares en Go. Elle brille particulièrement dans :
Cette librairie continue d'évoluer et représente un excellent choix pour les développeurs Go cherchant une solution de middleware.
Auteur(s)
Anthony MOUTTE
_Développeur / Concepteur @ ElevenLabs_🚀 je suis très intéressé par la recherche et développement ainsi que les bonnes pratiques.
Vous souhaitez en savoir plus sur le sujet ?
Organisons un échange !
Notre équipe d'experts répond à toutes vos questions.
Nous contacterDécouvrez nos autres contenus dans le même thème
Rabbitmq est un message broker très complet et robuste, c'est pourquoi le comprendre et l'utiliser est assez simple. En revanche, le maîtriser l'est un peu moins...
Nous allons voir comment utiliser le nouveau composant Messenger de Symfony
En tant que développeur nous avons tous déjà eu besoin de filtrer un jeu de donnés (array, collection, API etc...). Nous allons découvrir la librairie Xpression qui va nous permettre de filtrer différents contenus avec une syntaxe simplifiée.