decision-validation-error-production.md 1.5 KB

Decision Record: Скрытие деталей валидации в production

Дата: 2026-06-24 Статус: Implemented

Контекст

writeValidationError возвращал err.Error() в теле ответа всегда, включая production. Это утекало:

  • Имена полей: Key: 'createBookingRequest.EndTime'
  • Типы правил: Error:Field validation for 'EndTime' failed on the 'datetime' tag
  • Внутреннюю структуру API

Решение

В production: details: "validation failed" В development: details: err.Error() (полная картина для отладки)

func writeValidationError(w http.ResponseWriter, err error) {
    details := err.Error()
    if AppEnv == "production" {
        details = "validation failed"
    }
    writeJSON(w, http.StatusUnprocessableEntity, map[string]interface{}{
        "error":   "validation failed",
        "details": details,
    })
}

Альтернативы

Вариант Плюсы Минусы
Возвращать translated messages Понятно клиенту Нужен словарь переводов
Коды ошибок вместо текста Абстракция Клиент всё равно должен маппить
Отключить валидацию в production?! Глупость

Связанные заметки

  • [[backend-validation]]
  • [[atomic-csp-configuration]]

#decision-record #security #validation #api