Aller au contenu

Utilisation de gorilla/mux pour créer une API RESTful#

Introduction à l'architecture REST#

  • REST (Representational State Transfer) est un style architectural pour développer des services web.
  • Il définit un ensemble de contraintes pour créer des services web qui sont légers, maintenables, et évolutifs.
  • REST utilise les méthodes HTTP standard (GET, POST, PUT, DELETE, etc.) pour effectuer des opérations sur les ressources.
  • Les principaux composants de l'architecture REST sont les ressources, les requêtes, les réponses et les représentations.
  • Pour en savoir plus sur REST, consulter la RFC 7231.

Présentation de gorilla/mux#

  • gorilla/mux est un package Go qui implémente un routeur de requête HTTP et un dispatcher.
  • Il permet d'associer des gestionnaires de requêtes à des combinaisons spécifiques de méthodes HTTP et d'URL.
  • Il offre des fonctionnalités comme le routage par motifs d'URL, l'extraction de variables d'URL, la génération inverse d'URL, etc.
  • Pour installer gorilla/mux, utilisez la commande go get -u github.com/gorilla/mux.
  • Pour une documentation plus détaillée, consultez la page du projet sur GitHub.

Création d'une API RESTful avec gorilla/mux#

  • Pour créer une API RESTful avec gorilla/mux, définissez des routes associées à des gestionnaires de requêtes spécifiques.
  • Chaque gestionnaire de requête doit implémenter la logique nécessaire pour traiter une opération REST sur une ressource.
  • Pour définir une route, utilisez la méthode HandleFunc() de l'objet *mux.Router retourné par mux.NewRouter().
  • Pour démarrer le serveur, utilisez la fonction http.ListenAndServe().
  • Voici un exemple de code pour une API RESTful simple :
    r := mux.NewRouter()
    r.HandleFunc("/books/{title}", getBook).Methods("GET")
    r.HandleFunc("/books/{title}", createBook).Methods("POST")
    http.ListenAndServe(":8080", r)
    

Gestion des paramètres de requête et des variables d'URL#

  • gorilla/mux permet d'extraire des variables d'URL en utilisant la méthode Vars().
  • Vous pouvez également définir des contraintes sur les variables d'URL en utilisant des régularités.
  • Pour obtenir les paramètres de requête, utilisez la méthode Query() de l'objet *http.Request.
  • Voici un exemple de code :
    func getBook(w http.ResponseWriter, r *http.Request) {
      vars := mux.Vars(r)
      title := vars["title"]
      params := r.URL.Query()
      author := params.Get("author")
      // ... logic to handle the request ...
    }
    

Validation des données et gestion des erreurs#

  • Les données de requête doivent être validées avant d'être utilisées.
  • La validation peut inclure des contrôles de format, de taille, de cohérence, etc.
  • Les erreurs doivent être correctement gérées et signalées au client.
  • Le package net/http définit des constantes pour les codes de statut HTTP couramment utilisés.
  • Voici un exemple de code :
    func createBook(w http.ResponseWriter, r *http.Request) {
      // ... extract and validate data ...
      if invalid {
        http.Error(w, "Invalid request data", http.StatusBadRequest)
        return
      }
      // ... handle the request ...
    }