mjava-com SHALL 提供单一网关路由 POST /api/com/{vendor}/{action},每个 action MUST 对应基座某个 Client 方法。
POST /api/com/dingtalk/user.getActionRegistry 查找 dingtalk.user.get 注册的 handlerDDClient_Contacts.getUser_v2(...)网关 SHALL 在 Auth 拦截阶段校验调用方签名。校验逻辑 MUST 复用基座 add-request-auth-replay-guard 提供的 UtilSignature 与 NonceCache,不重新实现 HMAC。
401 { code: "AUTH_FAILED" }每个开放的 action MUST 通过三层校验:ActionRegistry 代码注册 + yml com.actions.enabled 启用 + 调用方 allowedActions 包含。
ActionRegistry 注册404 { code: "ACTION_NOT_FOUND" }com.actions.enabled 不含该 action403 { code: "ACTION_FORBIDDEN" }allowedActions 不含该 action403 { code: "ACTION_FORBIDDEN" }网关 SHALL 统一返回 McR<T>。第三方原始响应 MUST 放在 data 字段保留原结构。
McR.success(result),data = 原始 Map 或 DTOMcR.fail(code, message),data 含 vendor 原始错误信息网关 SHALL 按 callerId 做本地限流,阈值取自宜搭权限表单 rateLimit 字段。
429 { code: "RATE_LIMITED", retryAfter: 1 }网关审计日志 MUST 在 mjava-baseline §3.5 字段基础上追加 callerId / vendorAction / signatureValid。
./log/{日期}/com-{callerId}.logcallerId 与 vendorAction