Skip to content

事实目录与概念

事实目录(Fact Catalog)是项目对「规则可以读到哪些字段」的统一描述。Studio 编辑器、契约校验、测试用例的智能提示都基于它工作。

为什么需要目录

业务规则常见痛点:

  • 不同规则集对同一字段命名不一致(user.id / customer_id / uid
  • 类型漂移(曾经是数字的字段在某次发布后变成字符串)
  • 字段含义只存在于工程师脑里

事实目录把这些约束显式化:每个字段都有名称、类型、描述、示例值,作为项目级 single source of truth。

事实(Fact)

一个事实是一个原子字段定义。

jsonc
// POST /api/v1/projects/:pid/facts
{
  "name": "user.age",
  "type": "number",
  "description": "用户年龄(周岁)",
  "example": 28,
  "tags": ["user", "demographic"]
}

支持的类型:string · number · boolean · array<T> · object · concept:<name>

概念(Concept)

复合结构。当多个规则集都需要引用同一个对象(比如「用户」「订单」),用概念定义一次,事实目录里通过 concept:User 引用。

jsonc
// POST /api/v1/projects/:pid/concepts
{
  "name": "User",
  "fields": [
    { "name": "id", "type": "string" },
    { "name": "age", "type": "number" },
    { "name": "vip", "type": "boolean" }
  ]
}

API

操作端点
列出事实GET /api/v1/projects/:pid/facts
创建事实POST /api/v1/projects/:pid/facts
更新/删除PUT/DELETE /api/v1/projects/:pid/facts/:name
列出概念GET /api/v1/projects/:pid/concepts
创建概念POST /api/v1/projects/:pid/concepts
更新/删除PUT/DELETE /api/v1/projects/:pid/concepts/:name

与契约、Studio 的协作

  • 契约决策契约)通过事实/概念约束 RuleSet 的输入与输出。
  • Studio 编写表达式时下拉提示 / 类型校验都来自目录。
  • 测试用例 的输入字段提示也来自目录——Catalog 是项目所有「类型信息」的汇聚点。

基于 MIT 许可发布。