Walidacja w języku programowania KCL
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
- Repozytorium KCL Github:https://github.com/KusionStack/KCLVM
- Witryna KCL:https://kcl-lang.io/
- Konfiguracja i automatyzacja w KCL:https:///dev-genius/configuration-automation-in-kcl-f355732d9f20

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































