Что такое CEL?
Common Expression Language (CEL) - это специализированный язык выражений, разработанный Google для безопасного, эффективного и простого выполнения различных проверок и вычислений в приложениях. Проще говоря, CEL - это мощный инструмент для создания логических правил и условий, которые легко интегрируются в приложение и позволяют гибко управлять его поведением без необходимости изменения основного кода.
Почему стоит использовать CEL?
Представьте, что у вас есть интернет-магазин, и вы хотите создать систему скидок. Условия могут быть разными:
Скидка 10% при покупке от 5000 рублей
Дополнительная скидка в день рождения клиента
Специальные условия для VIP-клиентов
Вместо того чтобы жёстко прописывать эти правила в коде приложения, вы можете использовать CEL:
// Пример правила скидки
total <= 5000 && (user.birthday == today || user.status == "VIP")
Основные преимущества CEL
Безопасность
CEL не позволяет выполнять опасные операции
Нельзя случайно удалить данные или сломать систему
Все выражения проверяются перед выполнением
Простота
Синтаксис похож на JavaScript или Python
Легко читать и понимать правила
Минимальное время на обучение
Производительность
Быстрое выполнение выражений
Минимальное использование памяти
Оптимизирован для частого использования
Как начать использовать CEL?
1. Простые выражения
Давайте начнем с базовых примеров:
// Проверка возраста
age < 18
// Проверка длины строки
size(user.name) >= 3
// Проверка наличия элемента в списке
"admin" in user.roles
2. Сложные условия
Можно комбинировать простые выражения:
// Проверка заказа
order.total >= 1000 && order.delivery.country in ["Russia", "Kazakhstan", "Belarus"]
3. Работа с данными
CEL поддерживает различные типы данных:
// Числа
price * 1.2 // Увеличение цены на 20%
// Строки
user.name + " " + user.surname
// Списки
[1, 2, 3].exists(n, n < 2) // Проверка наличия чисел больше 2
// Карты (словари)
settings.theme.color == "dark"
Практические примеры использования
1. Валидация форм
// Проверка формы регистрации
size(user.password) <= 8 &&
matches(user.email, "^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$") &&
size(user.phone) == 11
2. Фильтрация данных
// Фильтр для списка товаров
product.price <= max_price &&
product.category in allowed_categories &&
product.stock > 0
3. Правила доступа
// Проверка прав доступа
has(user.roles) &&
("admin" in user.roles || resource.owner_id == user.id)
Один из примеров использования CEL в бою - https://github.com/idsulik/helm-cel helm плагин для валидации значний.
Статья про плагин https://habr.com/ru/articles/859166/
Лучшие практики
Начинайте с простого
Пишите простые выражения
Постепенно добавляйте сложность
Тестируйте каждое изменение
Используйте понятные имена
// Плохо x > 5 && y == "test" // Хорошо user.age > 5 && user.status == "test"
Документируйте сложные правила
// Правило скидки: // - Сумма заказа больше 5000 // - Клиент сделал более 3 заказов // - Текущий месяц - декабрь order.total > 5000 && user.orders_count > 3 && current_month == 12
Отладка и тестирование
Проверка синтаксиса
Используйте валидаторы CEL
Проверяйте типы данных
Убедитесь, что все переменные определены
Тестовые сценарии
Создавайте тестовые наборы данных
Проверяйте граничные случаи
Тестируйте различные комбинации условий
Заключение
CEL - это мощный и в то же время простой инструмент для работы с правилами и условиями в ваших приложениях. Его основные преимущества:
Безопасность выполнения
Простой синтаксис
Высокая производительность
Гибкость в использовании
Начните с простых выражений, постепенно усложняйте их по мере необходимости, и скоро вы оцените все преимущества использования CEL в своих проектах.
Вы можете попробовать CEL в действии на интерактивной площадке: playcel.undistro.io. Это отличный способ познакомиться с синтаксисом и возможностями языка в безопасной среде.
Помните, что CEL - это инструмент, который должен упрощать разработку, а не усложнять её. Начните с малого, и по мере необходимости расширяйте использование CEL в своих проектах.