// Simple predicates
'tacocat'.startsWith('taco')

// Parameterized predicates over structured data
account.balance >= transaction.withdrawal

// JSON objects
{'sub': '12345678',
 'aud': 'example2.cel.dev',
 'iss': 'https://example1.cel.dev/jwt-issuer'}

// Strongly typed objects
common.GeoPoint{ latitude: 10.0, longitude: -5.5 }

通用表达式语言 (CEL) 是一种表达式语言,可在对性能要求较高的应用中快速、可移植且安全地执行。CEL 旨在嵌入应用中,具有特定于应用的扩展,并且非常适合扩展应用可能已经在使用的声明式配置。

将 CEL 用于 API 调用的列表过滤器、协议缓冲区的验证限制以及 API 请求的授权规则等。

加快了对性能关键型路径的表达式评估(从纳秒到微秒)。
对开发者友好、轻量级且支持跨多个 Google 和外部系统采用通用语法的轻量级开发者。
支持子集和扩展,易于嵌入,还可以根据配置和政策要求进行定制。
非 Turing 完成,仅访问主机应用提供的数据。

CEL 非常适用于对性能至关重要的应用,因为它能够安全快速地(纳秒至微秒)进行评估,并且费用可预测。CEL 表达式特别适用于谓词逻辑和简单的数据转换。

在对表达式的求值频繁但修改不频繁的应用中,CEL 的使用效率最高。例如,根据安全政策评估 HTTP 请求是 CEL 的一个很好的用例。对于 CEL 安全政策表达式,验证表达式需要一次性配置成本,之后会对表达式进行非常频繁的评估,成本几乎可以忽略不计。

仍然不确定?您可以查看 CEL 概览和语言定义,也可以直接与我们联系!我们非常乐意为您提供帮助。

想为 CEL 项目提供帮助?为我们的开源代码和文档做贡献。我们非常期待您的帮助!