生态第三方包

言验:数据验证

言验 1.0 的可组合规则、转换、结构化问题及言据、ORM、HTTP 适配边界。

言验(yanxu-validate1.0.0 用中文链式 API 描述不可信输入边界。它可以在一次解析中收集路径化问题,并提供外部验证执行器、言据 Schema、ORM 模型和 HTTP 请求适配器;验证本身不替代授权、事务或传输层限制。

版本与安装

项目稳定值
包名言验
版本 / 公开标签1.0.0 / v1.0.0
最低言序1.1.6
依赖
构建目标字节码
yanbao add 言验 \
  --git https://github.com/yanxulang/yanxu-validate.git \
  --rev v1.0.0 \
  --version '^1.0'
[依赖]
言验 = { git = "https://github.com/yanxulang/yanxu-validate.git", 修订 = "v1.0.0", 版 = "^1.0" }

应提交生成的 言序.lock,固定公开标签解析出的提交和内容校验。

核心能力:对象规则与安全解析

「包:言验」 言验;

 用户规则  言验.对象型({
    「姓名」:言验.文本().至少2).至多50),
    「年龄」:言验.整数().至少0),
    「邮箱」:言验.文本().是邮件().可选(),
    「角色」:言验.枚举(【「读者」「作者」】).默认「读者」
}).拒绝未知();

 结果  用户规则.安全解析({
    「姓名」「子衿」
    「年龄」18
});

 结果.成功 
 结果.值;
否则
 问题  结果.问题列 
 问题【「路径」】;
 问题【「代码」】;
 问题【「消息」】;

对象默认移除未知键,可显式选择 保留未知拒绝未知。每项问题包含稳定代码、完整对象/列表路径、消息、期望和实际类型;错误记录实际类型而不复制原始敏感值。

规则与转换

类别入口
基础任选文本数字整数数字自文布尔典型
精确值字面枚举
复合列表对象型联合交叉条件
约束至少至多匹配是邮件是网址是日期其中
值处理可选可空默认预处理转化自定义

多个预处理和转换按登记顺序执行。预处理在空值和基础类型检查前运行,转换在基础规则与同步约束成功后运行。列和典默认值会在每次使用时深复制,不会因调用方修改一次结果而污染后续解析。

 端口规则  言验.数字自文()
    .至少1
    .至多65535);

 端口结果  端口规则.安全解析「8080」);

需要失败即中断时使用 规则.解析(值)言验.断验(规则, 值)。抛出错误使用 YANYAN_前缀;捕获后用 错误详情取稳定代码,不要匹配完整消息。

外部验证执行器

数据库唯一性、远程策略或批量权限检查可以登记为外部验证任务:

 用户名  言验.文本()
    .异步自定义(未被占用,「TAKEN」「用户名已占用」);

 结果  用户名.异步安全解析
    「子衿」
    言验.顺序验证执行器()
);

同步入口遇到任何嵌套的外部验证器时返回 ASYNC_REQUIRED,不会静默跳过检查。1.0 内建执行器按顺序确定性执行;并行、取消和超时由调用方注入的执行器负责。执行器必须为每个任务返回同位置的问题典或空,否则失败关闭。

言据、ORM 与 HTTP 适配

言据 Schema

 模式  {
    「类型」「据」
    「必需」:【「姓名」】,
    「允许额外」
    「属性」:{
        「姓名」:{「类型」「文」「最短」2}
    }
};

 结果  言验.验证言据({「姓名」「子衿」},模式);

言据模式(Schema典)把言据 1.2 Schema 编译为普通规则。它只处理已经解析的值和 Schema 典,不读取 .yj文件,也不解析言据源文本。

ORM 模型

模型规则(字段规则典)提供 验证创建验证更新验证字段登记场景验证场景,并有接受执行器的对应入口。预检查不能消除竞争条件:唯一性、外键和引用完整性最终仍须由事务与数据库约束保证。

HTTP 请求

 请求规则  言验.HTTP请求规则()
    .查询参数(查询规则)
    .正文(言验.言据模式(正文模式));

 结果  请求规则.验证请求(请求典);

适配器可组合路径参数、查询参数、首部、Cookie 和正文规则。它验证的是已解析请求典,不读取网络流,不协商内容类型,也不执行身份认证;传输层必须先限制原始首部和正文大小。

权限与安全边界

言验无第三方依赖,清单拒绝文件、网络、监听、环境、进程和原生扩展权限。外部验证器需要网络或数据库时,其能力、凭据、超时和取消均由顶层应用与注入执行器承担。

默认资源预算包括:

  • 文字、列或典最多 4096 个字符或项目;
  • 单次最多返回 256 个问题,Schema 最多 256 项;
  • 联合或交叉最多 64 个分支;
  • 每条规则最多 128 个同步约束和 128 个外部约束;
  • Schema 与深复制值最多嵌套 8 层。

限制项数只能把单条规则收紧到库硬上限以内。正则模式、自定义验证器与执行器都应来自受信任应用代码;库会结构化其异常,但不会隔离其 CPU、内存或宿主权限。

已知限制

  • 异步安全解析会等待执行器返回完整结果列;核心库不提供内建并行调度、取消或超时。
  • HTTP 适配器不是正文读取器、认证器或限流器,Schema 适配器不是文件解析器。
  • 验证成功只说明值符合规则;授权、唯一性、外键、事务一致性和业务状态仍需在各自边界检查。
  • 未知言据 Schema 注解会被忽略以容纳上层元数据;已知字段的类型错误会返回 YANYAN_YANJU_SCHEMA
  • 问题消息可本地化和改进,机器分支只能依赖代码与结构字段。

项目链接