Sobes.tech
Junior — Middle

Conte uma situação em que conseguiu aumentar a eficiência do trabalho de uma API REST.

sobes.tech IA

Resposta da IA

Num um dos meus projetos em Go, melhorei a eficiência da API REST otimizando o processamento de pedidos e reduzindo o tempo de resposta.

O que foi feito:

  1. Caching: adicionei caching para dados frequentemente solicitados usando cache em memória (por exemplo, Redis ou um mapa interno com mutex), para reduzir a carga na base de dados.

  2. Processamento paralelo: utilizei goroutines para executar operações independentes em paralelo durante o processamento do pedido.

  3. Otimização de consultas à base de dados: reescrevi as consultas SQL, adicionei índices para reduzir o tempo de execução.

  4. Uso de contexto (context.Context): para interromper oportunamente pedidos longos e liberar recursos.

Exemplo de código com caching e 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()

    // Simulação de pedido à base
    data := "dados da 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")

    // Obtenção de dados em 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, "Erro", http.StatusInternalServerError)
        return
    }

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

Como resultado, o tempo de resposta da API diminuiu, a carga na base de dados foi reduzida, o que melhorou o desempenho geral do serviço.