KCL 프로그래밍 언어의 유효성 검사

Jan 09 2023
소개 KCL(Kusion Configuration Language)은 오픈 소스 제약 기반 레코드 및 기능 언어입니다. KCL은 성숙한 프로그래밍 언어 기술과 실습을 통해 수많은 복잡한 구성의 작성을 개선하고 구성에 대한 더 나은 모듈성, 확장성 및 안정성, 더 간단한 논리 작성, 빠른 자동화 및 우수한 생태적 확장성을 구축하기 위해 노력하고 있습니다.

소개

KCL(Kusion Configuration Language) 은 오픈 소스 제약 기반 레코드 및 기능 언어입니다. KCL은 성숙한 프로그래밍 언어 기술과 실습을 통해 수많은 복잡한 구성의 작성을 개선하고 구성에 대한 더 나은 모듈성, 확장성 및 안정성, 더 간단한 논리 작성, 빠른 자동화 및 우수한 생태적 확장성을 구축하기 위해 노력하고 있습니다.

전제 조건

KCL 설치:

KCL의 각 릴리스에는 다양한 OS 및 아키텍처가 포함되어 있습니다. 이러한 바이너리 버전은 Github 에서 수동으로 다운로드하여 설치 {install-location}/kclvm/bin하고 환경 PATH에 추가 할 수 있습니다.

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

KCL 코드를 사용하여 JSON/YAML과 같은 구성 형식을 생성하는 것 외에도 KCL은 JSON/YAML 데이터의 형식 유효성 검사도 지원합니다. KCL은 구성 언어로서 OpenAPI 의 거의 모든 기능을 다룹니다 .

KCL에서 구조 정의를 사용하여 구성 데이터의 유효성을 검사할 수 있습니다. 동시에 체크 블록을 통해 사용자 정의 제약 규칙을 지원하고, 스키마에 정의된 속성을 확인하고 검증하기 위한 검증 표현식을 스키마에 작성한다. 입력 JSON/YAML이 해당 스키마 구조 정의 및 제약 조건을 충족하는지 여부를 확인하는 것은 매우 명확하고 간단합니다 .

스키마에서 check키워드를 사용하여 모든 스키마 속성의 유효성 검사 규칙을 작성할 수 있습니다. 검사 블록의 각 줄은 조건식에 해당합니다. 조건이 충족되면 유효성 검사가 성공한 것입니다. 조건식 뒤에는 , "check error message"확인에 실패할 때 표시할 메시지를 나타낼 수 있습니다. 다음은 제약 조건 표현식이 있는 스키마의 예입니다.

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

.

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!

향후 계획

KCL 유효성 검사 기능의 개선은 점차 "정적" 측면, 즉 컴파일 시간에 공식 유효성 검사 기능과 결합하여 데이터가 제약 조건을 충족하는지 여부, 제약 조건이 서로 충돌하는지 여부, 등, IDE를 통해 실시간으로 노출될 수 있습니다.

또한 KCL 모델 및 제약 조건을 패키지로 관리할 수 있을 것으로 예상합니다(이 패키지에는 KCL 파일만 있음). 예를 들어 Kubernetes 모델과 제약 조건을 즉시 사용할 수 있습니다. 사용자는 구성을 생성하거나 기존 구성을 확인할 수 있으며 KCL 상속을 통해 사용자가 원하는 모델과 제약 조건을 간단히 확장할 수 있습니다.

더 많은 문서