62 lines
2.7 KiB
YAML
62 lines
2.7 KiB
YAML
|
type: google.api.Service
|
||
|
config_version: 3
|
||
|
name: cel.googleapis.com
|
||
|
title: Common Expression Language
|
||
|
|
||
|
apis:
|
||
|
- name: google.api.expr.v1alpha1.ConformanceService
|
||
|
- name: google.api.expr.v1alpha1.CelService
|
||
|
|
||
|
documentation:
|
||
|
summary: Defines common types for the Common Expression Language.
|
||
|
overview: |-
|
||
|
# Common Expression Language
|
||
|
|
||
|
The Common Expression Language (CEL) implements common semantics for
|
||
|
expression evaluation, enabling different applications to more easily
|
||
|
interoperate.
|
||
|
|
||
|
Key Applications
|
||
|
|
||
|
* Security policy: organization have complex infrastructure and need
|
||
|
common tooling to reason about the system as a whole * Protocols:
|
||
|
expressions are a useful data type and require interoperability across
|
||
|
programming languages and platforms.
|
||
|
|
||
|
|
||
|
|
||
|
Guiding philosophy:
|
||
|
|
||
|
1. Keep it small & fast. * CEL evaluates in linear time, is mutation
|
||
|
free, and not Turing-complete. This limitation is a feature of the language
|
||
|
design, which allows the implementation to evaluate orders of magnitude
|
||
|
faster than equivalently sandboxed JavaScript. 2. Make it extensible. *
|
||
|
CEL is designed to be embedded in applications, and allows for extensibility
|
||
|
via its context which allows for functions and data to be provided by the
|
||
|
software that embeds it. 3. Developer-friendly * The language is
|
||
|
approachable to developers. The initial spec was based on the experience of
|
||
|
developing Firebase Rules and usability testing many prior iterations. *
|
||
|
The library itself and accompanying toolings should be easy to adopt by
|
||
|
teams that seek to integrate CEL into their platforms.
|
||
|
|
||
|
The required components of a system that supports CEL are:
|
||
|
|
||
|
* The textual representation of an expression as written by a developer.
|
||
|
It is of similar syntax of expressions in C/C++/Java/JavaScript * A binary
|
||
|
representation of an expression. It is an abstract syntax tree (AST). * A
|
||
|
compiler library that converts the textual representation to the binary
|
||
|
representation. This can be done ahead of time (in the control plane) or
|
||
|
just before evaluation (in the data plane). * A context containing one or
|
||
|
more typed variables, often protobuf messages. Most use-case will use
|
||
|
attribute_context.proto * An evaluator library that takes the binary
|
||
|
format in the context and produces a result, usually a Boolean.
|
||
|
|
||
|
Example of boolean conditions and object construction:
|
||
|
|
||
|
``` c // Condition account.balance >= transaction.withdrawal ||
|
||
|
(account.overdraftProtection && account.overdraftLimit >=
|
||
|
transaction.withdrawal - account.balance)
|
||
|
|
||
|
// Object construction common.GeoPoint{ latitude: 10.0, longitude: -5.5 }
|
||
|
```
|