百积木文档
开发指南类型系统

接口与方法

Interface、MethodDefinition、事件和接口容器的公共类型结构。

接口描述可调用能力,不是 JSON 数据。Interface、InterfaceMap、InterfaceList 和 MethodDefinition 不能作为普通数据或模型结构化输出类型,包括嵌套在数组和对象中的情况。

Interface

methods 和 events 都是必填数组;不用的一项写 [],两项不能同时为空。方法名在方法集合中唯一,事件名在事件集合中唯一;每个签名的参数名也必须唯一。

{
  "@type": "Interface",
  "name": "ProductProvider",
  "methods": [
    {
      "@type": "MethodDefinition",
      "name": "find",
      "async": false,
      "param_definitions": [
        {
          "name": "sku",
          "type": {
            "@type": "JsonSchema",
            "schema": {
              "type": "string"
            }
          },
          "required": true
        }
      ],
      "return_type": {
        "@type": "JsonSchema",
        "schema": {
          "type": [
            "object",
            "null"
          ]
        }
      },
      "error_type_map": {}
    }
  ],
  "events": [
    {
      "name": "changed",
      "paramDefinitions": [
        {
          "name": "sku",
          "type": {
            "@type": "JsonSchema",
            "schema": {
              "type": "string"
            }
          },
          "required": true
        }
      ]
    }
  ]
}

name、description 和 nullable 是 Interface 的可选字段。methods 不能写成以方法名为键的对象;每个方法在自己的 name 中声明名称。事件的参数字段是 paramDefinitions。

MethodDefinition

字段规则
@type独立作为 Type 时为 MethodDefinition;Interface 的方法数组项解析时也允许省略此标签
name必填方法名
param_definitions必填参数数组,无参数用 [];参数使用 name、type、可选 description、required、default_value
return_type必填完整 Type,不能用字符串 unknown 代替
async必填布尔值,属于签名兼容性,不是自动推断的实现细节
error_type_map可选,错误码到数据 Type 的映射;未声明与显式空映射在序列化中保留区别
description、nullable可选说明和类型可空声明

方法字段也接受 paramDefinitions、returnType、errorTypeMap 作为输入别名;规范序列化使用 snake_case。字段命名以各结构为准,不能把方法字段规则套用到事件上。

error_type_map 未声明表示没有提供错误映射,显式 {} 表示提供了空映射;都不能被理解为允许任意业务错误。实现声明的每个错误码都必须在调用方契约中存在,且对应错误类型兼容。不要为统一格式而批量补空映射。响应 envelope 与错误码的传输方式见 CModel 错误模型。

接口容器与引用值

类型类型成员字段用途
Interfacemethods / events单个服务所需契约
InterfaceMapvalueInterface以业务键绑定同一接口的多个服务
InterfaceListelementInterface按列表绑定同一接口的多个服务

容器成员必须是 Interface,或精确解析为 Interface 的 RefType;容器还可声明 nullable。数据字典使用 JSON Schema 的 additionalProperties,不能与 InterfaceMap.valueInterface 混用。

逻辑服务绑定值由 Runtime 的 ServiceReference 系列协议表达,不放进类型声明。Module 场景的完整声明和绑定步骤见 ServiceReference 与 InterfaceMap。

本页内容