Dasturlash

Common Expression Language (CEL) – Kodda Ma'lumotlarni Tez va Xavfsiz Tekshirish Usuli

31-mart, 2026, 10:008 ko'rish3 daqiqa o'qish
Common Expression Language (CEL) – Kodda Ma'lumotlarni Tez va Xavfsiz Tekshirish Usuli

Common Expression Language (CEL) – bu dasturchilarga ma'lumotlar ustida ifodalar yozish, ularni baholash va natijalarni qaytarish imkonini beruvchi yengil va portativ til. CEL tezligi, xavfsizligi va ko'p platformalarda qo'llanilishi bilan mashhur bo'lib, hozirda Kubernetes admission control, Google Cloud IAM shartlari, Firebase security rules, Envoy Proxy routing va Protovalidate kabi muhim infratuzilmalarda ishlatiladi.

CEL nima va qayerda qo'llaniladi?

CEL bir necha asosiy maqsadga xizmat qiladi:

  • Ma'lumotlarni tekshirish: JSON, Protobuf yoki oddiy JavaScript obyektlari ustida ifodalar yaratish.
  • Qoidalar motorini yaratish: Kiritilgan ma'lumotlarga asoslanib, dinamik qarorlar qabul qilish.
  • Ko'p platformali integratsiya: Go, Java, C++ va boshqa tillarda kutubxonalar orqali foydalanish.

Oddiy misol – foydalanuvchi obyekti

Quyidagi JSON foydalanuvchi ma'lumotlarini ko'rsatadi:

{
  "name": "Alice",
  "roles": ["admin", "editor", "viewer"],
  "age": 30,
  "email": "alice@example.com",
  "created": timestamp("2025-12-14T00:00:00Z"),
  "email_verified": timestamp("2025-12-14T18:30:00Z")
}

Ushbu ma'lumotlar ustida turli tekshiruvlar va transformatsiyalarni CEL ifodalar yordamida bajarish mumkin.

Asosiy operatorlar va funksiyalar

  • String va raqamlar: user.age >= 18 – foydalanuvchi 18 yoshdan katta yoki tengmi?
  • Domain tekshiruvi: user.email.endsWith("@example.com") – email domeni kerakli domenmi?
  • Ro'yxat a'zoligi (in): "admin" in user.roles – foydalanuvchida admin roli bormi?
  • exists(): user.roles.exists(r, r == "editor") – ro'yxatda editor roli mavjudmi?
  • filter(): user.roles.filter(r, r != "viewer") – viewer roli bo'lmagan rollarni olish.
  • Timestamp va duration: user.email_verified - user.created <= duration("24h") – email tasdiqlash 24 soat ichida bo'lgandimi?
  • Logical operatorlar: (user.age >= 18) && ("admin" in user.roles) – katta yoshda va admin roli bormi?
  • Shartli operator (?:): user.age >= 18 ? "adult" : "minor" – yoshga qarab natija.

Ma'lumotni transformatsiya qilish

CEL ifodalar natija sifatida har qanday turdagi ma'lumotni qaytarishi mumkin. Masalan, foydalanuvchidan shaxsiy ma'lumotlarni olib tashlab, ro'yxatni qisqartirish:

{"roles": user.roles, "is_adult": user.age >= 18}

Natija:

{"roles": ["admin", "editor", "viewer"], "is_adult": true}

Har bir ro'lni “elevated” (yuqori darajali) deb belgilash uchun map() funksiyasidan foydalanamiz:

user.roles.map(r, {"role": r, "elevated": r != "viewer"})

Natija:

[
  {"role": "admin", "elevated": true},
  {"role": "editor", "elevated": true},
  {"role": "viewer", "elevated": false}
]

Bu kabi transformatsiyalar xavfsizlik qoidalarini yaratishda, audit loglarini tayyorlashda yoki API javoblarini optimallashtirishda foydalidir.

CEL ning afzalliklari

  • Tezlik: Ifodalar kompilyatsiya qilinadi, shuning uchun bajarilish vaqtida minimal overhead.
  • Xavfsizlik: Cheklangan sintaksis va sandbox muhitida bajarilish, zararli koddan himoya.
  • Portativlik: Bir xil ifodalar bir nechta dasturlash tillarida va platformalarda ishlaydi.
  • Yuqori integratsiya: Kubernetes, Envoy, Google Cloud kabi katta ekotizimlarda qo'llab-quvvatlanadi.

Qayerdan boshlash kerak?

CEL bilan tanishish uchun rasmiy GitHub spetsifikatsiyasi va cel.dev saytidagi tutoriallar tavsiya etiladi. Go, Java yoki C++ kutubxonalarini o'rnatib, oddiy JSON faylga ifodalar qo'shish orqali amaliy tajriba orttiring.

Yangi texnologiyalarni o'rganish har doim birinchi qadamni qo'yish bilan boshlanadi – CEL ham shu kabi, sodda ifodalar orqali murakkab biznes qoidalarini yaratish imkonini beradi.

Manba: Hacker News
#CEL #Common Expression Language #Kubernetes #Google Cloud IAM #JSON
Telegram da muhokama qilish