yjp 035b0038e3 创建 4 minggu lalu
..
README.md 035b0038e3 创建 4 minggu lalu
log.go 035b0038e3 创建 4 minggu lalu
schema.yaml 035b0038e3 创建 4 minggu lalu
schema_doc.go 035b0038e3 创建 4 minggu lalu
schema_node.go 035b0038e3 创建 4 minggu lalu
test.yaml 035b0038e3 创建 4 minggu lalu
utils.go 035b0038e3 创建 4 minggu lalu
yaml_checker_test.go 035b0038e3 创建 4 minggu lalu

README.md

yaml_checker

一、校验原理说明

涉及两种类型的YAML文件:schema文件和被校验文件,校验器的原理就是通过schema定义YAML文件的结构,利用schema定义检查被校验文件的有效性。

schema文件必须是schema为根节点的YAML文件,schema节点类型有object和field两种,如果需要将定义的object或者field类型节点升级为数组,只需要as_array字段为true即可。

object类型的节点属性:

type: object # 必须为object
name: # 必传,yaml对象的名称
describe: # 必传,yaml对象的描述
required: # 非必传,该字段在被检测文件中是否是必传字段,默认为false
as_array: # 非必传,是否升级为数组类型,默认为false
fields: # 子字段定义,可以是object或者field类型的节点定义

field类型的节点属性:

type: field # 必须为field
name: # 必传,yaml对象的名称
describe: # 必传,yaml对象的描述
required: # 非必传,该字段在被检测文件中是否是必传字段,默认为false
as_array: # 非必传,是否升级为数组类型,默认为false
field_type: # 字段类型,可以是string,int,bool

给出一个较完整的示例:

schema:
  - type: field
    name: test_field_array
    describe: 测试field数组(必传)
    required: true
    as_array: true
    field_type: string
  - type: field
    name: test_field
    describe: 测试field(必传)
    required: true
    field_type: string
  - type: object
    name: test_obj_array
    describe: 测试对象(必传)
    required: true
    as_array: true
    fields:
      - type: field
        name: field
        describe: 测试对象字段类型字段(非必传)
        required: false
        field_type: string
  - type: object
    name: test_obj
    describe: 测试对象(必传)
    required: true
    fields:
      - type: field
        name: field_array
        describe: 测试对象字段类型数组字段(必传)
        required: true
        as_array: true
        field_type: string
      - type: field
        name: field
        describe: 测试对象字段类型字段(非必传)
        required: false
        field_type: string
      - type: object
        name: obj_array
        describe: 测试对象包含对象数组(必传)
        required: true
        as_array: true
        fields:
          - type: field
            name: obj_array_field1
            describe: 对象数组字段1(必传)
            required: true
            field_type: string
          - type: field
            name: obj_array_field2
            describe: 对象数组字段2(非必传)
            required: false
            field_type: string

一个有效的YAML文件,如下所示:

test_field_array:
  - aaa
  - bbb
  - ccc
test_field: ddd
test_obj_array:
  - field: aaa
test_obj:
  field_array:
    - aaa
    - bbb
  field: ccc
  obj_array:
    - obj_array_field1: aaa
    - obj_array_field1: bbb
      obj_array_field2: ccc

二、包使用说明

首先导入包

import "git.sxidc.com/go-tools/yaml_checker"
schemaDoc, err := NewSchemaDoc("schema.yaml")
if err != nil {
    t.Fatal(err)
}

err = schemaDoc.ValidateFile("test.yaml")
if err != nil {
    t.Fatal(err)
}

/*
err = schemaDoc.ValidateMap(yamlMap)
if err != nil {
    t.Fatal(err)
}
*/