Création d'un serveur et d'un client HTTP simples#
Fonctionnement du protocole HTTP#
- HTTP signifie HyperText Transfer Protocol.
- C'est un protocole de communication basé sur le modèle client-serveur.
- HTTP utilise des méthodes telles que GET, POST, PUT, DELETE pour spécifier l'action souhaitée sur la ressource.
Gestion des requêtes et réponses HTTP en Go#
- Go propose le package
net/http
pour interagir avec le protocole HTTP. - Les objets
Request
etResponse
du packagenet/http
représentent respectivement les requêtes et réponses HTTP. - Utiliser
http.NewRequest
pour créer une requête ethttp.DefaultClient.Do
pour envoyer une requête.
Exemple de code:
req, err := http.NewRequest("GET", "http://example.com", nil)
resp, err := http.DefaultClient.Do(req)
Création d'un serveur HTTP simple avec le package net/http#
- Utiliser
http.HandleFunc
pour enregistrer un gestionnaire de fonction et un chemin. - Utiliser
http.ListenAndServe
pour démarrer un serveur HTTP.
Exemple de code:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Bonjour, monde")
})
log.Fatal(http.ListenAndServe(":8080", nil))
Gestion des routes et des méthodes HTTP#
- Utiliser
http.ServeMux
pour créer un multiplexeur de requêtes. - Ajouter des gestionnaires pour différents chemins et méthodes avec
mux.HandleFunc
.
Exemple de code:
mux := http.NewServeMux()
mux.HandleFunc("/articles", ArticlesHandler)
http.ListenAndServe(":8080", mux)
Utilisation de middlewares pour gérer l'authentification et les erreurs#
- Les middlewares permettent de traiter les requêtes et les réponses à différents niveaux de la pile HTTP.
- Implémenter l'authentification en vérifiant les en-têtes de requête pour un jeton valide.
- Gérer les erreurs en écrivant un code d'état HTTP approprié dans la réponse.
Exemple de code:
func AuthMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
token := r.Header.Get("Authorization")
if token != "Token_valid" {
http.Error(w, "Accès non autorisé", http.StatusUnauthorized)
return
}
next.ServeHTTP(w, r)
})
}
Création d'un client HTTP#
- Utiliser
http.Client
pour créer un client HTTP personnalisé. - Le client HTTP peut être configuré avec un délai d'expiration, des cookies, etc.
Exemple de code:
client := &http.Client{
Timeout: time.Second * 10,
}
resp, err := client.Get("http://example.com")
Commandes: Pour exécuter un programme Go, utilisez la commande:
go run <nom_du_fichier>.go
Pour compiler un programme Go, utilisez la commande:
go build <nom_du_fichier>.go
Note#
- Le protocole HTTP est sans état; chaque requête est indépendante.
- Go permet un traitement
efficace des requêtes HTTP grâce à sa gestion de la concurrence et des goroutines. - Les middlewares peuvent être utilisés pour exécuter du code avant et après chaque requête, ce qui est utile pour l'authentification, la journalisation, la gestion des erreurs, etc. - Un client HTTP en Go peut être utilisé pour envoyer des requêtes à des serveurs HTTP. - L'outil de ligne de commande Go (go) est utilisé pour construire et gérer les programmes Go.