Walidacja w języku programowania KCL

Jan 09 2023
Wprowadzenie Kusion Configuration Language (KCL) to otwarty język oparty na ograniczeniach i funkcjonalnym. KCL usprawnia pisanie dużej liczby złożonych konfiguracji poprzez dojrzałą technologię i praktykę języka programowania oraz jest zaangażowana w budowanie lepszej modułowości, skalowalności i stabilności wokół konfiguracji, prostsze pisanie logiki, szybką automatyzację i dobrą ekologiczną ekstensjonalność.

Wprowadzenie

Kusion Configuration Language (KCL) to oparty na ograniczeniach rekord i język funkcjonalny typu open source. KCL usprawnia pisanie dużej liczby złożonych konfiguracji poprzez dojrzałą technologię i praktykę języka programowania oraz jest zaangażowana w budowanie lepszej modułowości, skalowalności i stabilności wokół konfiguracji, prostsze pisanie logiki, szybką automatyzację i dobrą ekologiczną ekstensjonalność.

Warunek wstępny

Zainstaluj KCL:

Każde wydanie KCL obejmuje różne systemy operacyjne i architektury. Te wersje binarne można ręcznie pobrać i zainstalować z Github oraz dodać {install-location}/kclvm/bindo środowiska PATH.

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

Oprócz używania kodu KCL do generowania formatów konfiguracyjnych, takich jak JSON/YAML, KCL obsługuje również sprawdzanie poprawności formatu danych JSON/YAML. Jako język konfiguracji, KCL obejmuje prawie wszystkie funkcje OpenAPI .

W KCL definicja struktury może służyć do sprawdzania poprawności danych konfiguracyjnych. Jednocześnie obsługuje zdefiniowane przez użytkownika reguły ograniczeń za pośrednictwem bloku sprawdzania i zapisuje wyrażenia sprawdzające w schemacie, aby sprawdzić i zweryfikować atrybuty zdefiniowane przez schemat. Bardzo jasne i proste jest sprawdzenie, czy wejściowy JSON/YAML spełnia odpowiednią definicję struktury schematu i ograniczenia .

W schemacie możemy użyć checksłowa kluczowego do zapisania reguł sprawdzania poprawności każdego atrybutu schematu. Każda linia w bloku kontrolnym odpowiada wyrażeniu warunkowemu. Gdy warunek jest spełniony, walidacja kończy się pomyślnie. Po wyrażeniu warunkowym może wystąpić , "check error message"komunikat, który ma zostać wyświetlony, gdy sprawdzenie zakończy się niepowodzeniem. Oto przykład schematu z wyrażeniami ograniczającymi.

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

​

Istnieje plik w formacie 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 na przyszłość

Doskonalenie możliwości walidacji KCL będzie stopniowo koncentrować się na aspekcie „statycznym”, czyli w czasie kompilacji, w połączeniu z możliwością walidacji formalnej, może bezpośrednio analizować, czy dane spełniają ograniczenia, czy ograniczenia nie kolidują ze sobą, itp. i mogą być ujawniane w czasie rzeczywistym za pośrednictwem IDE.

Oczekujemy również, że modele i ograniczenia KCL mogą być zarządzane jako pakiet (ten pakiet zawiera tylko pliki KCL). Na przykład modele i ograniczenia Kubernetes mogą być używane od razu po wyjęciu z pudełka. Użytkownicy mogą generować konfiguracje lub weryfikować istniejące konfiguracje, a także po prostu rozszerzać modele i ograniczenia, których chcą użytkownicy, poprzez dziedziczenie KCL.

Więcej dokumentów