🏠 На главную | 🧭 Руководство (RU) | 🛡️ Core API
🛡️ Core: PII и DTO (Архитектура)
Этот раздел описывает, как структурируются и защищаются данные в экосистеме codex-core.
Цель домена
Основная цель домена core — гарантировать, что персональные данные (PII) никогда случайно не утекут в логи, при этом сохраняя неизменяемое и стандартизированное представление данных для внутренней логики.
1. Автоматическое маскирование PII
BaseDTO автоматически маскирует конфиденциальную информацию в своих методах repr и str.
Как это работает:
- Сопоставление по ключевым словам: Если имя поля содержит любое из предопределенных ключевых слов (
phone,email,name,address,note,comment), его значение в логах будет заменено на***. - Рекурсивное маскирование: Если поле не является напрямую PII, но содержит словарь или список словарей (например,
metadata), библиотека будет рекурсивно сканировать их на наличие ключевых слов PII.
Пример:
from codex_core.core import BaseDTO
class OrderDTO(BaseDTO):
order_id: int
customer_email: str # Будет замаскировано
notes: str # Будет замаскировано
meta: dict # Сканируется рекурсивно
2. Неизменяемость
Все DTO по умолчанию заморожены (используется pydantic.ConfigDict(frozen=True)). Это гарантирует, что данные не могут быть изменены после создания, что важно для многопоточных и параллельных сред.
Рекомендации
- Не логируйте DTO в "горячих" путях: Хотя логика маскирования PII оптимизирована, она всё равно вносит определенные накладные расходы. Избегайте логирования DTO внутри плотных циклов или высокочастотных алгоритмов с бэктрекингом.
- Используйте осмысленные имена полей: Всегда называйте свои поля в соответствии с их содержанием. Если вы назовете поле номера телефона
p, оно не будет замаскировано автоматически. Используйтеphone,user_phoneи т. д. - Явное маскирование: Если у вас есть конфиденциальное поле, которое не соответствует нашим ключевым словам, вы всё равно можете замаскировать его, назвав соответствующим образом (например,
secret_note).