Validación en el Lenguaje de Programación KCL

Jan 09 2023
Introducción Kusion Configuration Language (KCL) es un lenguaje funcional y de registro basado en restricciones de código abierto. KCL mejora la escritura de una gran cantidad de configuraciones complejas a través de la tecnología y la práctica de lenguajes de programación maduros, y se compromete a construir una mejor modularidad, escalabilidad y estabilidad en torno a la configuración, escritura lógica más simple, automatización rápida y buena extensionalidad ecológica.

Introducción

Kusion Configuration Language (KCL) es un lenguaje funcional y de registro basado en restricciones de código abierto. KCL mejora la escritura de una gran cantidad de configuraciones complejas a través de la tecnología y la práctica de lenguajes de programación maduros, y se compromete a construir una mejor modularidad, escalabilidad y estabilidad en torno a la configuración, escritura lógica más simple, automatización rápida y buena extensionalidad ecológica.

requisito previo

Instalar KCL:

Cada versión de KCL incluye varios sistemas operativos y arquitecturas. Estas versiones binarias se pueden descargar e instalar manualmente desde Github y agregar {install-location}/kclvm/bina la RUTA del entorno.

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

Además de usar código KCL para generar formatos de configuración como JSON/YAML, KCL también admite la validación de formato de datos JSON/YAML. Como lenguaje de configuración, KCL cubre casi todas las características de OpenAPI .

En KCL, se puede usar una definición de estructura para validar los datos de configuración. Al mismo tiempo, admite reglas de restricción definidas por el usuario a través del bloque de verificación y escribe expresiones de validación en el esquema para verificar y validar los atributos definidos por el esquema. Es muy claro y simple verificar si la entrada JSON/YAML satisface la definición y las restricciones de la estructura del esquema correspondiente .

En el esquema, podemos usar la checkpalabra clave para escribir las reglas de validación de cada atributo del esquema. Cada línea en el bloque de verificación corresponde a una expresión condicional. Cuando se cumple la condición, la validación es exitosa. La expresión condicional puede ir seguida de , "check error message"para indicar el mensaje que se mostrará cuando falle la comprobación. Este es un ejemplo de un esquema con expresiones de restricción.

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

​

Hay un archivo de 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!

Plan de futuro

La mejora de las capacidades de validación de KCL se centrará gradualmente en el aspecto "estático", es decir, en el momento de la compilación, combinado con la capacidad de validación formal, puede analizar directamente si los datos cumplen con las restricciones, si las restricciones entran en conflicto entre sí, etc., y se pueden exponer en tiempo real a través del IDE.

También esperamos que los modelos y las restricciones de KCL se puedan administrar como un paquete (este paquete solo tiene archivos KCL). Por ejemplo, los modelos y restricciones de Kubernetes se pueden usar de forma inmediata. Los usuarios pueden generar configuraciones o verificar configuraciones existentes, y simplemente pueden extender los modelos y las restricciones que los usuarios desean a través de la herencia de KCL.

Más documentos