Sobes.tech
Junior — Middle

Cuente una situación en la que logró mejorar la eficiencia del trabajo de una API REST.

sobes.tech AI

Respuesta de la IA

En uno de mis proyectos en Go, mejoré la eficiencia del API REST optimizando el procesamiento de solicitudes y reduciendo el tiempo de respuesta.

Lo que se hizo:

  1. Caché: agregué caché para datos solicitados con frecuencia usando caché en memoria (por ejemplo, Redis o un mapa interno con mutex), para reducir la carga en la base de datos.

  2. Procesamiento paralelo: utilicé goroutines para ejecutar operaciones independientes en paralelo durante el procesamiento de la solicitud.

  3. Optimización de consultas a la base de datos: reescribí las consultas SQL, agregué índices para reducir el tiempo de ejecución.

  4. Uso de context (context.Context): para interrumpir oportunamente solicitudes largas y liberar recursos.

Ejemplo de código con caché y 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()

    // Simulación de consulta a la base de datos
    data := "datos de la BD para " + 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")

    // Obtención de datos en paralelo
    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, "Error", http.StatusInternalServerError)
        return
    }

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

Como resultado, el tiempo de respuesta del API se redujo y la carga en la base disminuyó, mejorando el rendimiento general del servicio.