Sobes.tech
Junior — Middle

Povedajte o situácii, kedy sa vám podarilo zvýšiť efektívnosť práce REST API.

sobes.tech AI

Odpoveď od AI

V jednom z mojich projektov v Go som zlepšil efektivitu REST API optimalizáciou spracovania požiadaviek a skrátením času odozvy.

Čo bolo urobené:

  1. Caching: pridanie cache pre často požadované údaje pomocou in-memory cache (napríklad Redis alebo zabudovaná mapa s mutexom), aby sa znížilo zaťaženie databázy.

  2. Paralelné spracovanie: použitie goroutine na paralelné vykonávanie nezávislých operácií počas spracovania požiadavky.

  3. Optimalizácia dopytov na databázu: prepísanie SQL dopytov, pridanie indexov na skrátenie času ich vykonávania.

  4. Použitie context (context.Context): na včasné prerušenie dlhých požiadaviek a uvoľnenie zdrojov.

Príklad kódu s cache-ovaním a goroutine-ami:

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()

    // Simulácia dopytu na databázu
    data := "dáta z DB pre " + 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")

    // Paralelné získavanie dát
    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, "Chyba", http.StatusInternalServerError)
        return
    }

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

Ako výsledok, doba odozvy API sa skrátila a záťaž na databázu klesla, čo zlepšilo celkový výkon služby.