跳到主要内容

RPC 资源

启用 vef.IntegrationModule 后,框架注册以下管理资源。它们都是挂载在 /api 下的 RPC 资源,使用API文档中的标准信封 (resourceactionversionparamsmeta)。所有操作都不是公开 的:调用方必须已认证,且每个操作声明其表格所列的权限。

本页使用的约定:

  • CRUD 读操作的查询结构体嵌入 crud.Sortable(一个 meta 结构体),因此 过滤字段从请求的 meta 对象解码;find_page 额外从 meta.pagemeta.size 读取分页(page.Pageable),meta.sort 携带排序声明。
  • find_page 的响应是 page.Page[T]pagesizetotalitems
  • 变更操作从 params 解码。标记必填的字段由校验强制;其余为可选。
  • 所有定义模型的响应都携带标准审计字段(idcreatedAtcreatedByupdatedAtupdatedBy),下方字段表中不再重复。

integration/contract

契约定义。Schema 在保存时编译,坏掉的契约永远不会进入调用。

操作权限输入输出
find_pageintegration.contract.queryContractSearch + 分页 metapage.Page[Contract]
find_allintegration.contract.queryContractSearchContract[]
createintegration.contract.createContractParams创建后的 Contract
updateintegration.contract.updateContractParams更新后的 Contract
deleteintegration.contract.delete主键参数(params.id成功

ContractSearch(查询过滤):

字段类型匹配说明
codestringcontains按契约编码片段过滤
namestringcontains按名称片段过滤
isEnabledboolequals按启用状态过滤;不传则两者皆匹配
labelsobject(string→string)每对相等宿主驱动的 label 过滤(业务侧契约选择器按 label 选取)

ContractParams(create/update):

字段类型必填说明
idstring仅 update要更新记录的主键
codestring业务代码调用的唯一契约编码
namestring显示名
descriptionstring自由描述
labelsobject(string→string)宿主自有的筛选元数据;键必须匹配 ^[A-Za-z0-9]([A-Za-z0-9_-]*[A-Za-z0-9])?$(至多 63 字符),值至多 256 字符(ErrInvalidLabel
inputSchemaJSON Schema 对象自包含的 draft 2020-12 输入 Schema;为空则跳过输入校验
outputSchemaJSON Schema 对象适配器返回值的自包含 Schema;为空则跳过输出校验
isEnabledbool禁用的契约拒绝调用(ErrContractDisabled

删除仍被路由引用的契约会返回标准外键冲突错误(路由表的契约列携带空字符串 通配哨兵,因此该检查由资源自身强制)。

integration/system

外部系统定义。写入时加密敏感认证参数与数据源密码;读取时始终掩码为 "******"。更新时提交掩码保持已存值不变。

操作权限输入输出
find_pageintegration.system.querySystemSearch + 分页 metapage.Page[System](已掩码)
find_allintegration.system.querySystemSearchSystem[](已掩码)
createintegration.system.createSystemParams创建后的 System
updateintegration.system.updateSystemParams更新后的 System
deleteintegration.system.delete主键参数(params.id成功

删除系统——或在更新中移除/改名其数据源——会释放其数据源注册表条目。

SystemSearch(查询过滤):

字段类型匹配说明
codestringcontains按系统编码片段过滤
namestringcontains按名称片段过滤
isEnabledboolequals按启用状态过滤

SystemParams(create/update):

字段类型必填说明
idstring仅 update主键
codestring唯一系统编码
namestring显示名
baseUrlstring绝对基础 URL;为该系统脚本启用作用域 http 库。保存时校验(ErrInvalidBaseURL
outboundAuthOutboundAuthConfig出站认证(见下);null 表示请求不带认证发出
outboundEnvelopeOutboundEnvelopeConfig系统级请求/响应包装脚本(见下);null 表示适配器请求原样透传
inboundAuthInboundAuthConfig入站验证(见下);null 表示完全拒绝入站投递
dataSourceDataSourceConfig直连数据库(见下);启用作用域 sql
paramsobject(string→string)非敏感的系统级参数,脚本经 system.params 可见
timeoutMsint单次 HTTP 调用上限;0 使用框架默认
retryRetryPolicy出站重试策略(见下)
isEnabledbool禁用的系统拒绝两个流向(出站 ErrSystemDisabled;入站统一按认证失败拒绝)

OutboundAuthConfig / InboundAuthConfig

字段类型说明
schemestringscheme 名。出站:nonehttp_basicbearerheaderquerysignaturescript 或自定义。入站额外支持 ip
paramsobject(string→string)scheme 参数;scheme 声明的敏感参数值加密存储、响应中掩码
scriptstringscript scheme 的自定义签名/验证脚本体;在零 IO 运行时中执行

各 scheme 的参数参考见出站调用入站投递

OutboundEnvelopeConfig

字段类型说明
requeststring包装脚本:以 request{ method, path, headers, query, body })接收适配器发出的请求,返回真正上线的请求;省略的字段保持适配器原值
responsestring解包脚本:以 response(fetch Response 形态)接收完成的 HTTP 响应;其返回值即适配器调用的所得

信封存在时至少要配置两者之一,已配置的脚本必须可编译,且系统必须具备 HTTP 传输(ErrInvalidEnvelope)。

DataSourceConfig

字段类型说明
kindstring数据库类型,配置数据源时必填(ErrInvalidDataSource);与 vef.data_sources.type 相同词汇:postgresmysqlsqlitesqlserveroracle
modestring脚本写权限:read_only(默认;sql.execute 抛错)或 read_write(启用 sql.execute
hoststring服务器主机
portint服务器端口
userstring登录用户
passwordstring登录密码——加密存储、响应中掩码
databasestring数据库名
schemastringSchema 名(支持的方言)
pathstring文件路径(sqlite)
sslModestringSSL 模式(与 vef.data_sources.ssl_mode 相同词汇)
sslRootCertstringCA 证书路径

RetryPolicy

字段类型说明
maxAttemptsint总尝试次数,含首个调用
initialBackoffMsint首次重试前的基础延迟;0 使用 httpx 默认
maxBackoffMsint尝试间延迟上限;0 使用 httpx 默认

integration/adapter

适配器绑定。脚本在保存时做编译检查;绑定关系本身由数据库唯一键与外键守护。

操作权限输入输出
find_pageintegration.adapter.queryAdapterSearch + 分页 metapage.Page[Adapter]
find_allintegration.adapter.queryAdapterSearchAdapter[]
createintegration.adapter.createAdapterParams创建后的 Adapter
updateintegration.adapter.updateAdapterParams更新后的 Adapter
deleteintegration.adapter.delete主键参数(params.id成功

AdapterSearch(查询过滤):

字段类型匹配说明
systemIdstringequals按所属系统过滤
contractIdstringequals按绑定契约过滤
directionstringequalsoutboundinbound
isEnabledboolequals按启用状态过滤

AdapterParams(create/update):

字段类型必填说明
idstring仅 update主键
systemIdstring适配器所属系统
contractIdstring适配器实现的契约
directionstringoutbound(省略时默认)或 inbound;其他值返回 ErrInvalidDirection
scriptstring翻译脚本;必须可编译(ErrInvalidScript
timeoutMsint脚本运行超时覆盖;0 继承 vef.integration.run_timeout
isEnabledbool禁用的适配器拒绝调用(ErrAdapterDisabled

integration/route

路由规则。契约与系统引用均在保存时校验——契约列携带空字符串通配哨兵、 没有外键(ErrInvalidRouteRef)。

操作权限输入输出
find_pageintegration.route.queryRouteSearch + 分页 metapage.Page[Route]
find_allintegration.route.queryRouteSearchRoute[]
createintegration.route.createRouteParams创建后的 Route
updateintegration.route.updateRouteParams更新后的 Route
deleteintegration.route.delete主键参数(params.id成功

RouteSearch(查询过滤):

字段类型匹配说明
routeKeystringcontains按路由键片段过滤
contractIdstringequals按作用契约过滤
systemIdstringequals按目标系统过滤
isEnabledboolequals按启用状态过滤

RouteParams(create/update):

字段类型必填说明
idstring仅 update主键
routeKeystring该规则服务的键(租户、分支机构、院区);空为默认路由
contractIdstring将规则限定到一个契约;空表示适用于所有契约。精确 (key, contract) 匹配优先于契约通配匹配
systemIdstring命中后提供服务的系统
isEnabledbool禁用的规则永不命中

integration/code_map

按系统的值翻译表。条目在保存时构建索引,冲突或格式错误的映射永远不会进入 查找;宿主注册了可枚举码值目录时,codeSet 标识还必须是目录中已注册的 集合。

操作权限输入输出
find_pageintegration.code_map.queryCodeMapSearch + 分页 metapage.Page[CodeMap]
find_allintegration.code_map.queryCodeMapSearchCodeMap[]
createintegration.code_map.createCodeMapParams创建后的 CodeMap
updateintegration.code_map.updateCodeMapParams更新后的 CodeMap
deleteintegration.code_map.delete主键参数(params.id成功

CodeMapSearch(查询过滤):

字段类型匹配说明
systemIdstringequals按所属系统过滤
codeSetstringcontains按码值集标识片段过滤
namestringcontains按名称片段过滤
isEnabledboolequals按启用状态过滤

CodeMapParams(create/update):

字段类型必填说明
idstring仅 update主键
systemIdstring所属系统
codeSetstring被翻译码值集标识(如 gender);宿主注册目录时受目录约束;必须匹配 ^[A-Za-z0-9]([A-Za-z0-9_.-]*[A-Za-z0-9])?$,至多 128 字符(ErrInvalidCodeMap
namestring显示名
entriesCodeMapEntry[]映射对(见下);任一侧重复查找值被拒绝(ErrInvalidCodeMap
onUnmappedstringreject(省略时默认——fail closed)、passthroughfallback;其他值被拒绝(ErrInvalidCodeMap
fallbackCanonical任意 JSON 值fallback 策略下 toCanonical 对未映射输入返回的值;onUnmappedfallback 时必填,其他策略下禁止(ErrInvalidCodeMap
fallbackExternal任意 JSON 值fallback 策略下 toExternal 对未映射输入返回的值;onUnmappedfallback 时必填,其他策略下禁止(ErrInvalidCodeMap
isEnabledbool禁用的映射视同不存在(ErrMissingCodeMap

CodeMapEntry

字段类型必填说明
canonical字符串 / 数字 / 布尔宿主侧主值,toCanonical 查找的输出
external字符串 / 数字 / 布尔外部侧主值,toExternal 查找的输出
canonicalAliases数组匹配该条目的额外宿主侧值(只匹配,不输出)
externalAliases数组匹配该条目的额外外部侧值

integration/code_set

宿主标准码值目录的只读视图,服务于映射编辑器的选择器。它按能力降级:没有 mold.CodeSetInspector 时两个操作都返回 supported: false。存在 inspector 时, 目录应答失败会以 ErrCodeSetCatalogFailed 拒绝两个操作——码值映射保存时标识 无法经目录确认也同样报此错误。

操作权限输入输出
list_code_setsintegration.code_map.queryCodeSetCatalog
list_codesintegration.code_map.queryListCodesParamsCodeCatalog

ListCodesParams

字段类型必填说明
codeSetstring要枚举的码值集

CodeSetCatalog 响应:

字段类型说明
supportedbool宿主未注册可枚举目录时为 false(编辑器退化为自由文本输入)
codeSetsCodeSetInfo[]条目含 codeSet(标识)与 name(显示名)

CodeCatalog 响应:

字段类型说明
supportedbool同上
codesCodeInfo[]条目含 code(标准值)与 label(显示名)

integration/log

只读调用日志:分页视图用于浏览,单条视图用于查看完整捕获。

操作权限输入输出
find_pageintegration.log.queryLogSearch + 分页 metapage.Page[InvocationLog]
find_oneintegration.log.queryLogSearch一条 InvocationLog

LogSearch(查询过滤):

字段类型匹配说明
systemCodestringequals按系统编码过滤
contractCodestringequals按契约编码过滤
directionstringequalsoutboundinbound
failureKindstringequals失败分类之一;空行为成功
requestIdstringequals关联触发调用的 API 请求

InvocationLog 响应字段:

字段类型说明
idstring日志行 ID
systemCodestring提供服务(或拒绝)的系统
contractCodestring被调用的契约
directionstringoutboundinbound
failureKindstring失败分类;成功为空
durationMsint调用耗时
inputJSON捕获的标准输入(按 vef.integration.log 掩码、截断)
outputJSON捕获的标准输出(掩码、截断)
httpTraceHTTPExchange[]脚本运行期间捕获的线上交换(见下)
errorstring失败消息;成功时缺省
requestIdstring来源 API 请求 ID
createdAt / createdBy时间戳 / string创建审计字段

HTTPExchange(日志与 dry-run 追踪共用):

字段类型说明
methodstringHTTP 方法
urlstring请求 URL(已掩码)
requestHeadersobject请求头(凭证头始终掩码)
requestBodystring捕获的请求体(掩码、截断)
statusint响应状态;调用未完成时为 0
responseHeadersobject响应头
responseBodystring捕获的响应体(掩码、截断)
durationMsint交换耗时
errorstring调用失败时的传输错误消息

integration/ops

运维端点:脚本测试台、连接探测与路由诊断。dry run 与探测对禁用的定义同样 有效——测试先于启用。

操作权限输入输出
dry_runintegration.ops.dry_runDryRunParamsDryRunResult
dry_run_inboundintegration.ops.dry_run_inboundDryRunInboundParamsInboundDryRunResult
test_connectionintegration.ops.test_connectionTestConnectionParamsConnectionCheck
diagnose_routesintegration.ops.diagnose_routesRouteDiagnostics

dry_run

在契约下对系统执行脚本,返回输出、失败分类与完整线上追踪。它发出的调用是 真实的;不记入统计与调用日志。

请求(DryRunParams):

字段类型必填说明
systemCodestring目标系统(允许禁用状态)
contractCodestring以其 Schema 约束本次运行的契约
scriptstring编辑器中未保存的内容;为空回退到已保存的出站适配器脚本(不存在时 ErrAdapterNotFound
input任意 JSON 值调用输入,经契约输入 Schema 校验

响应(DryRunResult):

字段类型说明
output任意 JSON 值脚本返回值(已通过 Schema 校验);失败时为 null
traceHTTPExchange[]线上交换,即使运行失败也会填充——运维可看到脚本走到了哪里
failureKindstring失败分类;成功时缺省
errorstring失败消息;成功时缺省

dry_run_inbound

对合成的外部请求执行入站脚本,业务处理器被桩替换为返回给定的样例输出。 验证被绕过(测试台测的是翻译,不是凭证),不触碰业务代码、不做任何记录; 契约 Schema 在分发两侧真实强制。

请求(DryRunInboundParams):

字段类型必填说明
systemCodestring目标系统
contractCodestring以其 Schema 约束分发的契约
scriptstring编辑器中未保存的内容;为空回退到已保存的入站适配器脚本
requestInboundRequestParams合成的外部请求(见下)
handlerOutput任意 JSON 值桩业务处理器返回的样例;经输出 Schema 校验

InboundRequestParams(全部可选):

字段类型说明
methodstring合成请求的 HTTP 方法
pathstring请求路径
headersobject(string→string)头名会归一化为小写,与真实网关投递一致
queryobject(string→string)查询参数
bodystring原始请求负载

响应(InboundDryRunResult):

字段类型说明
reply任意 JSON 值外部系统将收到的应答(脚本返回 $response 信封时含该信封)
dispatchedInput任意 JSON 值脚本分发给(桩)处理器的内容——单值,或脚本多次分发时的数组
failureKindstring失败分类;成功时缺省
errorstring失败消息;成功时缺省

test_connection

探测已保存系统配置的每种传输。探测失败是数据(reachable: false)而非 错误——探测已经回答了问题。配置故障(未知认证 scheme、凭证无法解密)则返回 错误。

请求(TestConnectionParams):

字段类型必填说明
systemCodestring要探测的系统
methodstring探测 HTTP 方法;默认 GET
pathstring相对基础 URL 的探测路径;默认 /

响应(ConnectionCheck;系统配置了某传输时对应探测才出现):

字段类型说明
httpHTTPProbe系统配置了 baseUrl 时出现
http.reachablebool请求是否完成
http.statusint可达时的响应状态
http.statusTextstring可达时的状态文本
http.durationMsint探测耗时
http.errorstring不可达时的传输错误
databaseDatabaseProbe系统配置了 dataSource 时出现
database.reachablebool一次性连接是否成功
database.versionstring成功时的服务器版本
database.durationMsint探测耗时
database.errorstring不可达时的连接错误

diagnose_routes

在配置缺口变成运行期错误之前报告路由表的问题——悬挂的适配器、被禁用的 目标、未覆盖的契约。按需计算;无参数。

响应(RouteDiagnostics):

字段类型说明
findingsRouteFinding[]每个缺口一条(见下);空表示路由表一致

RouteFinding

字段类型说明
kindstring发现分类(见下)
routeIdstring涉及的路由行(存在时)
routeKeystring始终有意义——"" 为默认路由
contractCode / contractNamestring涉及契约的编码与显示名
systemCode / systemNamestring涉及系统的编码与显示名

kind 词汇表:

常量类别含义
RouteFindingDanglingAdapterdangling_adapter契约限定路由的目标系统对该契约没有已启用适配器——经此规则调用将得到 ErrAdapterNotFound
RouteFindingWildcardGapwildcard_gap某个已启用契约无法由通配(或默认)路由服务,因为目标系统对它没有已启用适配器。提示性
RouteFindingDisabledSystemdisabled_system已启用路由指向被禁用的系统——经此调用将得到 ErrSystemDisabled
RouteFindingDisabledContractdisabled_contract已启用路由限定到被禁用的契约——该规则永远无法命中成功调用
RouteFindingUncoveredContractuncovered_contract某个已启用契约在路由表现有的某个键下解析不到任何规则——用该键调用将得到 ErrRouteNotFound。当该键有意只路由子集时为提示性

另请参阅