Common Expression Language (CEL)
Sobre
CEL (Common Expression Language) é uma linguagem de expressão rápida, portátil e segura, projetada para ser embutida em aplicações e estender configurações declarativas (filtros, validações, regras de autorização). Mantida como projeto open source, com especificação em cel-expr/cel-spec.
Fonte: https://cel.dev/
Características principais
| Característica | Descrição |
|---|---|
| Rápida | Avaliação de nanossegundos a microssegundos, com custo previsível |
| Portátil | Sintaxe leve e comum entre sistemas Google e externos |
| Segura | Não é Turing-completa; acessa apenas dados fornecidos pela aplicação host |
| Formalmente verificável | Provas de corretude e equivalência via solvers SMT (Z3) |
| Extensível | Aceita funções e tipos específicos da aplicação |
Exemplos de sintaxe
// Predicados simples
'tacocat'.startsWith('taco')
// Predicados parametrizados sobre dados estruturados
account.balance >= transaction.withdrawal
// Objetos JSON
{'sub': '12345678',
'aud': 'example2.cel.dev',
'iss': 'https://example1.cel.dev/jwt-issuer'}
// Objetos fortemente tipados
common.GeoPoint{ latitude: 10.0, longitude: -5.5 }Casos de uso
- Filtros de lista em chamadas de API
- Constraints de validação em protocol buffers
- Regras de autorização em requisições de API
- Kubernetes: validação e políticas direto na API do cluster, sem webhooks externos (doc)
- Google Cloud: filtro e transformação de eventos (Eventarc)
Quando usar
Ideal quando a expressão é avaliada com frequência e alterada raramente: o custo de validar a expressão é pago uma vez e a avaliação posterior é desprezível. Exemplo típico: avaliar uma requisição HTTP contra uma política de segurança. Bom para lógica de predicados e transformações simples de dados.
Verificação formal (novidade)
O CEL Formal Verification Framework, baseado no Z3, permite:
- Provar a corretude de políticas em todo o espaço de entrada
- Checar equivalência de AST entre duas expressões
- Garantir invariantes de segurança
Motivação: políticas escritas ou refatoradas por agentes de IA podem ter casos de borda não cobertos por testes unitários. Implementação de referência: CEL Java Verifier.
Limitações
- Não é Turing-completa (sem loops arbitrários), por design
- Voltada a expressões, não a programas completos
- Nota gerada a partir da página inicial; detalhes de funções e tipos estão na definição da linguagem