Sobes.tech
Back to questions
Middle+
3

Code review: проблемы в функции getExternalOrderIdFromCRM (HTTP-клиент)

Companies where asked
Magnit Tech

Answer from AI

sobes.tech AI

При ревью функции getExternalOrderIdFromCRM, которая использует HTTP-клиент, стоит обратить внимание на следующие моменты:

  • Обработка ошибок: убедитесь, что все возможные ошибки (сетевые, таймауты, неверный ответ) корректно обрабатываются и не приводят к панике.
  • Таймауты: HTTP-запросы должны иметь ограничение по времени, чтобы избежать зависания.
  • Повторные попытки (retry): если запросы к CRM могут временно падать, стоит реализовать логику повторных попыток с экспоненциальной задержкой.
  • Парсинг ответа: проверяйте, что ответ корректно десериализуется, и учитывайте возможные изменения формата.
  • Логирование: полезно логировать запросы и ответы для отладки.

Пример улучшенного кода с таймаутом и обработкой ошибок:

func getExternalOrderIdFromCRM(client *http.Client, url string) (string, error) {
    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        return "", err
    }

    ctx, cancel := context.WithTimeout(req.Context(), 5*time.Second)
    defer cancel()
    req = req.WithContext(ctx)

    resp, err := client.Do(req)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()

    if resp.StatusCode != http.StatusOK {
        return "", fmt.Errorf("unexpected status code: %d", resp.StatusCode)
    }

    var result struct {
        OrderID string `json:"order_id"`
    }
    if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
        return "", err
    }

    return result.OrderID, nil
}

Такой подход делает функцию более надежной и удобной для поддержки.