Sobes.tech
Junior — Middle

Povestiți o situație în care ați reușit să creșteți eficiența muncii unei API REST.

sobes.tech AI

Răspuns de la AI

În unul dintre proiectele mele în Go, am îmbunătățit eficiența API-ului REST prin optimizarea procesării cererilor și reducerea timpului de răspuns.

Ce s-a făcut:

  1. Caching: am adăugat caching pentru datele solicitate frecvent folosind un cache în memorie (de exemplu, Redis sau un map intern cu mutex), pentru a reduce sarcina asupra bazei de date.

  2. Procesare paralelă: am folosit goroutines pentru a executa operațiuni independente în paralel în timpul procesării cererii.

  3. Optimizarea interogărilor la bază de date: am rescris interogările SQL, am adăugat indecși pentru a reduce timpul de execuție.

  4. Utilizarea contextului (context.Context): pentru a întrerupe la timp cererile lungi și a elibera resursele.

Exemplu de cod cu caching și 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()

    // Simulare cerere la bază
    data := "date din Baza de date pentru " + 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")

    // Obținerea datelor în paralel
    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, "Eroare", http.StatusInternalServerError)
        return
    }

    w.Write([]byte(result))
}

Ca rezultat, timpul de răspuns al API-ului s-a redus, iar sarcina pe baza de date a scăzut, ceea ce a îmbunătățit performanța generală a serviciului.