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:
-
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.
-
Processamento paralelo: utilizei goroutines para executar operações independentes em paralelo durante o processamento do pedido.
-
Otimização de consultas à base de dados: reescrevi as consultas SQL, adicionei índices para reduzir o tempo de execução.
-
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.