Валидация UUID используется в системах, где идентификаторы должны соответствовать строгому формату, обеспечивающему глобальную уникальность и структурную предсказуемость. В экосистеме Class-validator для этих целей применяется декоратор проверки UUID, обеспечивающий контроль соответствия строки стандартам RFC 4122.
UUID представляет собой 128-битный идентификатор, обычно отображаемый
в виде строки формата xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,
где каждая группа символов имеет строго определённую длину и набор
допустимых значений. Нарушение структуры приводит к невалидности
значения независимо от его семантического содержания.
UUID делится на несколько версий, различающихся способом генерации:
Каждая версия сохраняет общий формат, но отличается внутренней логикой формирования. Валидатор UUID в Class-validator учитывает не только общий формат, но и возможность ограничения конкретной версии.
Декоратор @IsUUID используется для проверки того, что
строковое значение соответствует формату UUID. Базовая задача
заключается в строгой валидации структуры строки без анализа её
семантики.
Основной синтаксис:
import { IsUUID } from 'class-validator';
class UserDto {
@IsUUID()
id: string;
}
В этом случае любое значение id, не соответствующее
стандарту UUID, будет отклонено в процессе валидации.
Валидация может быть ограничена конкретной версией UUID. Это особенно важно в системах, где формат идентификатора влияет на архитектурные гарантии.
import { IsUUID } from 'class-validator';
class UserDto {
@IsUUID('4')
id: string;
}
Поддерживаемые значения версии:
"3""4""5""all" (по умолчанию)При указании версии происходит дополнительная проверка соответствующих битовых полей UUID, включая вариант и версионный октет.
Валидация UUID проверяет несколько уровней:
Формат строки
Допустимые символы
0-9, a-f,
A-FВерсионная структура
Примеры значений:
550e8400-e29b-41d4-a716-446655440000550e8400e29b41d4a716446655440000550e8400-e29b-41d4-a716-44665544ZZZZВ Class-validator декораторы работают в связке с функцией
validate или validateOrReject. Проверка UUID
становится частью общей схемы валидации DTO-объекта.
import { validate } from 'class-validator';
import { IsUUID } from 'class-validator';
class OrderDto {
@IsUUID('4')
orderId: string;
}
const dto = new OrderDto();
dto.orderId = 'invalid-id';
validate(dto).then(errors => {
console.log(errors);
});
При нарушении правил возвращается массив ошибок, каждая из которых содержит метаданные о проваленной проверке.
UUID часто применяется как идентификатор сущностей в API. Валидатор обеспечивает защиту слоя контроллеров от некорректных входных данных.
import { IsUUID, IsString } from 'class-validator';
class UpdateProductDto {
@IsUUID('4')
productId: string;
@IsString()
name: string;
}
Такая структура гарантирует, что идентификатор продукта соответствует строгому формату до попадания в бизнес-логику.
При использовании строгих схем сериализации важно учитывать, что
@IsUUID не выполняет преобразование типов. Значение должно
быть строкой до момента валидации. При передаче числовых или объектных
значений проверка будет завершаться ошибкой независимо от их
потенциальной сериализуемости.
Особенность заключается в том, что валидатор не пытается «исправлять» входные данные, а только проверяет их соответствие стандарту.
Поведение декоратора может быть расширено через стандартные опции:
import { IsUUID } from 'class-validator';
class SessionDto {
@IsUUID('4', {
message: 'sessionId должен быть UUID версии 4'
})
sessionId: string;
}
Доступные параметры:
message — пользовательское сообщение ошибкиgroups — группировка валидацииeach — проверка элементов массиваПри необходимости проверки коллекций идентификаторов используется
параметр each.
import { IsUUID } from 'class-validator';
class BatchRequestDto {
@IsUUID('4', { each: true })
ids: string[];
}
В этом случае каждый элемент массива проверяется независимо, а ошибка локализуется на уровне конкретного индекса.
В архитектурах с наследованием DTO валидаторы сохраняют своё поведение. Если базовый класс содержит UUID-поле, декоратор продолжает работать без необходимости повторного объявления.
class BaseEntityDto {
@IsUUID('all')
id: string;
}
class CommentDto extends BaseEntityDto {
text: string;
}
Проверка UUID реализована как регулярное выражение с дополнительной логикой анализа версии. Производительность остаётся стабильной даже при массовой валидации объектов, так как операция имеет константную сложность относительно длины строки.
В типичных сценариях API нагрузка от @IsUUID
пренебрежимо мала по сравнению с другими слоями обработки запроса.
В связке с class-transformer часто используется предварительное
преобразование входных данных перед валидацией. Однако
@IsUUID не зависит от трансформации и работает
исключительно с итоговым значением поля.
При включённом transform валидация UUID остаётся
детерминированной и не изменяет входную строку.
На практике чаще всего встречаются следующие проблемы:
Каждая из этих ситуаций приводит к отклонению значения на уровне декоратора без дальнейшей обработки.
UUID используется как ключевой идентификатор в распределённых системах, где требуется отсутствие коллизий без централизованной генерации. Валидация на уровне DTO предотвращает проникновение некорректных идентификаторов в доменный слой.
В связке с ORM и слоями репозиториев UUID становится стандартом идентификации сущностей, особенно при работе с микросервисной архитектурой и внешними API-интеграциями.