Racontez une situation où vous avez réussi à améliorer l'efficacité du travail d'une API REST.
sobes.tech IA
Réponse de l'IA
Dans l’un de mes projets en Go, j’ai amélioré l’efficacité de l’API REST en optimisant le traitement des requêtes et en réduisant le temps de réponse.
Ce qui a été fait :
-
Caching : j’ai ajouté un cache pour les données fréquemment demandées en utilisant un cache en mémoire (par exemple, Redis ou une carte interne avec mutex), afin de réduire la charge sur la base de données.
-
Traitement parallèle : j’ai utilisé des goroutines pour exécuter des opérations indépendantes en parallèle lors du traitement de la requête.
-
Optimisation des requêtes à la base : j’ai réécrit les requêtes SQL, ajouté des index pour réduire le temps d’exécution.
-
Utilisation du contexte (context.Context) : pour interrompre rapidement les requêtes longues et libérer des ressources.
Exemple de code avec cache et goroutines :
var cache = make(map[string]string)
var mu sync.RWMutex
func getData(key string) (string, error) {
mu.RLock()
if val, ok := cache[key]; ok {
mu.RUnlock()
return val, nil
}
mu.RUnlock()
// Simulation d’une requête à la base
data := "données de la BDD pour " + key
mu.Lock()
cache[key] = data
mu.Unlock()
return data, nil
}
func handler(w http.ResponseWriter, r *http.Request) {
key := r.URL.Query().Get("key")
// Récupération parallèle des données
var wg sync.WaitGroup
var result string
var err error
wg.Add(1)
go func() {
defer wg.Done()
result, err = getData(key)
}()
wg.Wait()
if err != nil {
http.Error(w, "Erreur", http.StatusInternalServerError)
return
}
w.Write([]byte(result))
}
En conséquence, le temps de réponse de l’API a diminué, la charge sur la base a été réduite, ce qui a amélioré la performance globale du service.