Aller au contenu

Exercices#

Créer un serveur de chat simple avec TCP#

Conception de l'architecture du serveur de chat#

  • Identifier les composants clés du serveur de chat : client, serveur, protocole de communication.
  • Définir les interactions client-serveur (connexion, déconnexion, envoi de messages).

Implémentation du serveur de chat en utilisant TCP#

  • Initialiser un serveur TCP en Go : net.Listen("tcp", ":8080").
  • Accepter les connexions entrantes avec une boucle infinie : for { conn, err := listener.Accept() }.
  • Gérer chaque connexion dans une goroutine distincte pour permettre des communications simultanées.

Création d'un client de chat en utilisant TCP#

  • Utiliser net.Dial("tcp", "localhost:8080") pour se connecter au serveur.
  • Écrire des messages au serveur via la connexion TCP : fmt.Fprintf(conn, "Message\n").
  • Lire les réponses du serveur : bufio.NewReader(conn).ReadString('\n').

Gestion des erreurs et des déconnexions#

  • Gérer les erreurs de connexion et d'écriture/lecture avec if err != nil { log.Fatal(err) }.
  • Détecter les déconnexions par des erreurs de lecture/écriture.
  • Fermer les connexions après utilisation : defer conn.Close().

Implémenter une API RESTful pour gérer une liste de tâches#

Conception de l'API pour la gestion des tâches#

  • Définir les opérations CRUD : création (POST), lecture (GET), mise à jour (PUT), suppression (DELETE).
  • Spécifier les routes pour chaque opération, par exemple /tasks pour la lecture et la création, /tasks/{id} pour la mise à jour et la suppression.

Mise en place de l'API RESTful avec gorilla/mux#

  • Initialiser un routeur avec r := mux.NewRouter().
  • Définir les routes et les manipulatrices correspondantes : r.HandleFunc("/tasks", createTask).Methods("POST").
  • Démarrer le serveur avec http.ListenAndServe(":8080", r).

Implémentation des opérations CRUD (Create, Read, Update, Delete)#

  • Définir une structure pour les tâches : type Task struct { ID string; Description string }.
  • Stocker les tâches dans une map ou une base de données.
  • Implémenter les fonctions createTask, readTasks, updateTask, deleteTask pour interagir avec le stockage.

Gestion des erreurs et validation des données#

  • Utiliser http.Error pour renvoyer des erreurs HTTP.
  • Valider les données entrantes avec les tags json sur les structures et if pour vérifier les conditions.
  • Gérer les erreurs de base de données et les erreurs de formatage JSON.
  • Renvoyer des réponses HTTP appropriées : w.WriteHeader(http.StatusCreated), json.NewEncoder(w).Encode(tasks).