什么是 fluent-schema
fluent-schema 是一个可以帮助开发者快速且可靠地构建 JSON Schema 的工具。它不仅提供了丰富的 schema 构建器,还支持自定义和插件扩展。
fluent-schema 由 Microsoft 开源,使用 TypeScript 编写,可在 Node.js 和浏览器环境下使用。
安装 fluent-schema
安装 fluent-schema 可以采用 npm 或 yarn 直接下载:
npm install fluent-schema
yarn add fluent-schema
如何使用 fluent-schema
通过 fluent-schema,我们可以使用 fluent API 定义 JSON Schema,然后使用 validate
方法验证数据是否符合定义的格式。
实例
下面的示例代码展示了如何使用 fluent-schema 验证一个 JSON 对象:
-- -------------------- ---- ------- ----- - --------- - - ---------------------- ----- ------------- - ---------------------------- ----- --------- - --- ------------ ----- ---- - - ----- ----- ----- ---- --- -------- - ------- ---- ---- ----- ----- ---------- ------ ----- -------- ------- - -- ----- ------ - ------------------------ --------------- -- -------------- - ----------------- -- -------- - ---- - ----------------------------- -
验证结果将会输出 Data is valid
。
fluent-schema 构建器
fluent-schema 提供了多种 schema 构建器,以下是一些流行的构建器:
.title(value: string)
为 schema 设置标题:
const schema = createSchema() .title('Person Schema');
.description(value: string)
为 schema 添加描述:
const schema = createSchema() .description('Schema for person object');
.type(value: schemaTypes)
设置 schema 的数据类型:
const schema = createSchema() .type('array');
.required()
设置当前属性为必填项:
const schema = createSchema() .required();
.minLength(value: number)
设置字符串属性的最小长度:
const schema = createSchema() .minLength(3);
.maxLength(value: number)
设置字符串属性的最大长度:
const schema = createSchema() .maxLength(10);
.pattern(value: RegExp)
设置字符串属性的正则表达式:
const schema = createSchema() .pattern(/(\w+)\s(\w+)/);
.items(value: fluentSchema)
设置数组属性中的每个项的属性:
const schema = createSchema() .type('array') .items( createSchema().type('string') );
.properties(properties: { [key: string]: fluentSchema })
设置对象属性的属性:
-- -------------------- ---- ------- ----- ------ - -------------- --------------- ------------- ----- -------------- --------------- -------------- ---- -------------- --------------- ------------ ---
.additionalProperties(value: fluentSchema)
设置对象添加其他属性时的值:
-- -------------------- ---- ------- ----- ------ - -------------- --------------- ------------- ----- -------------- --------------- -------------- ---- -------------- --------------- ------------ -- ---------------------- ----------------------------- --
.oneOf(schemas: fluentSchema[])
设置对象属性可以符合多种定义:
-- -------------------- ---- ------- ----- ------ - -------------- --------------- -------- -------------- ------------- --------- -------------------------------------------- --- -------------- ------------- ---- ----------------------------------------- -- ---
.dependencies(dependencies: { [key: string]: string[] | fluentSchema })
设置对象属性的依赖项:
-- -------------------- ---- ------- ----- ------ - -------------- --------------- ------------- ----- ------------------------------ ---- ------------------------------ -------- ----------------------------- -- --------------- ----- ------------ ---- -------------- -------------- ------- ----------------------------- - ---
fluent-schema 校验器
fluent-schema 除了提供 schema 构建器外,还提供了一些常用的校验器:
minimum(value: number)
设置数值属性的最小值:
const schema = createSchema() .type('number') .minimum(10);
maximum(value: number)
设置数值属性的最大值:
const schema = createSchema() .type('number') .maximum(100);
multipleOf(value: number)
设置数值属性必须是指定数字的倍数:
const schema = createSchema() .type('number') .multipleOf(10);
format(value: string)
设置属性的格式:
const schema = createSchema() .type('string') .format('email');
const(value: any)
设置属性必须等于指定值:
const schema = createSchema() .const('John Doe');
enum(values: any[])
设置属性必须符合指定的枚举值:
const schema = createSchema() .enum(['Male', 'Female']);
minItems(value: number)
设置数组属性的最少项数:
const schema = createSchema() .type('array') .minItems(3);
maxItems(value: number)
设置数组属性的最多项数:
const schema = createSchema() .type('array') .maxItems(10);
contains(value: fluentSchema)
设置数组属性必须包含指定的子项:
const schema = createSchema() .type('array') .contains( createSchema().type('string').pattern(/^\d+$/) );
自定义 fluent-schema
fluent-schema 支持自定义 schema 构建器和校验器,以下是自定义正则表达式的例子:
-- -------------------- ---- ------- ------ - ------------- ----------- - ---- ---------------- -------------------- ------------- -- - -- ----------- --- --------------------------- - -------------- - -------------------- - --- ----- ------ - -----------------------------------------------
在上面的示例中,我们可以使用 addModifier
方法添加一个自定义属性 pattern
并指定正则表达式。
fluent-schema 插件
fluent-schema 还支持插件扩展,以下是一个使用插件的示例:
-- -------------------- ---- ------- ------ - ----------------------- --------------------- - ---- ---------------- ------ - ---------------- - ---- ---------------------- ---------------------------------------- ----- -------- - ------------------------------------------------ ----- ---- - -- ---- ---- -- -------- --- ----- ------ - --------------- -- -------------- - ----------------- -- -------- - ---- - ----------------------------- -
在上面的示例中,我们使用 addFluentSchemaPlugin
方法添加了一个自定义插件 ValidationPlugin
并进行数据验证。
总结
fluent-schema 是一个非常好用的 JSON Schema 工具,它提供了丰富的 schema 构建器和校验器,支持自定义和插件扩展。通过使用 fluent-schema,我们可以快速且可靠地构建 JSON Schema,并对数据进行校验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60731