Aller au contenu

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 et Response du package net/http représentent respectivement les requêtes et réponses HTTP.
  • Utiliser http.NewRequest pour créer une requête et http.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.