Validação na linguagem de programação KCL

Jan 09 2023
Introdução Kusion Configuration Language (KCL) é um registro baseado em restrição de código aberto e linguagem funcional. A KCL melhora a escrita de um grande número de configurações complexas por meio de tecnologia e prática de linguagem de programação madura e está comprometida em construir melhor modularidade, escalabilidade e estabilidade em torno da configuração, escrita lógica mais simples, automação rápida e boa extensão ecológica.

Introdução

Kusion Configuration Language (KCL) é um registro baseado em restrição de código aberto e linguagem funcional. A KCL melhora a escrita de um grande número de configurações complexas por meio de tecnologia e prática de linguagem de programação madura e está comprometida em construir melhor modularidade, escalabilidade e estabilidade em torno da configuração, escrita lógica mais simples, automação rápida e boa extensão ecológica.

Pré-requisito

Instale o KCL:

Cada versão do KCL inclui vários sistemas operacionais e arquiteturas. Essas versões binárias podem ser baixadas e instaladas manualmente no Github e adicionadas {install-location}/kclvm/binao ambiente PATH.

export PATH=$PATH:{install-location}/kclvm/bin

Além de usar o código KCL para gerar formatos de configuração como JSON/YAML, o KCL também oferece suporte à validação de formato de dados JSON/YAML. Como linguagem de configuração, a KCL abrange quase todos os recursos do OpenAPI .

Na KCL, uma definição de estrutura pode ser usada para validar os dados de configuração. Ao mesmo tempo, ele oferece suporte a regras de restrição definidas pelo usuário por meio do bloco de verificação e grava expressões de validação no esquema para verificar e validar os atributos definidos pelo esquema. É muito claro e simples verificar se a entrada JSON/YAML satisfaz a definição e as restrições da estrutura do esquema correspondente .

No esquema, podemos usar a checkpalavra-chave para escrever as regras de validação de cada atributo do esquema. Cada linha no bloco de verificação corresponde a uma expressão condicional. Quando a condição é satisfeita, a validação é bem-sucedida. A expressão condicional pode ser seguida por , "check error message"para indicar a mensagem a ser exibida quando a verificação falhar. Aqui está um exemplo de um esquema com expressões de restrição.

import regex

schema Sample:
    foo: str  # Required, cannot be None/Undefined, and the type must be str
    bar: int  # Required, cannot be None/Undefined, and the type must be int
    fooList: [int]  # Required, cannot be None/Undefined, and the type must be int list
    color: "Red" | "Yellow" | "Blue"  # Required, literal union type, and must be one of "Red", "Yellow", "Blue".
    id?: int  # Optional, can be None/Undefined, the type must be int
    check:
        0 <= bar < 100  # bar must be greater than or equal to 0 and less than 100
        0 < len(fooList) < 100  # fooList cannot be None/Undefined, and the length must be greater than 0 and less than 100
        regex.match(foo, "^The.*Foo$")  # regular expression matching
        bar in range(100)  # bar can only range from 1 to 99
        bar in [2, 4, 6, 8]  # bar can only take 2, 4, 6, 8
        bar % 2 == 0  # bar must be a multiple of 2
        all foo in fooList {
            foo > 1
        }  # All elements in fooList must be greater than 1
        any foo in fooList {
            foo > 10
        }  # At least one element in fooList must be greater than 10
        abs(id) > 10 if id  # check expression with if guard, when id is not empty, the absolute value of id must be greater than 10

​

Existe um arquivo no formato JSON data.json:

{
    "name": "Alice",
    "age": "18",
    "message": "This is Alice",
    "data": {
        "id": "1",
        "value": "value1"
    },
    "labels": {
        "key": "value"
    },
    "hc": [1, 2, 3]
}

schema User:
    name: str
    age: int
    message?: str
    data: Data
    labels: {str:}
    hc: [int]
        
    check:
        age > 10

schema Data:
    id: int
    value: str

$ kcl-vet data.json schema.k
Validate succuss!

Plano futuro

A melhoria das capacidades de validação da KCL vai gradualmente centrar-se no aspecto “estático”, ou seja, em tempo de compilação, aliada à capacidade de validação formal, pode analisar diretamente se os dados cumprem os constrangimentos, se os constrangimentos entram em conflito entre si, etc., e podem ser expostos em tempo real através do IDE.

Também esperamos que os modelos e restrições KCL possam ser gerenciados como um pacote (este pacote tem apenas arquivos KCL). Por exemplo, os modelos e restrições do Kubernetes podem ser usados ​​imediatamente. Os usuários podem gerar configurações ou verificar configurações existentes e podem simplesmente estender os modelos e restrições que os usuários desejam por meio da herança de KCL.

Mais Documentos