# 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()` (полная картина для отладки) ```go 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