WU / 文档通用微前端
中文

演进契约并兼容旧客户端

提供带版本的服务、转换旧契约并验证输入与输出。

本页介绍 WU Framework 4.0.0。升级现有项目之前,请阅读 Framework 4.0 与 CLI 1.2 迁移指南。

wu-framework/services 通过 schema 定义契约、验证调用并生成客户端。provideService 返回 { dispose },consumeService 返回异步方法。在应用内使用 context.wu,并为服务通道授予 rpc.provide 或 rpc.call。此示例使用宿主运行时来展示版本转换。

import { wu } from 'wu-framework';
import { schema, defineService, provideService, consumeService,
  checkServiceCompatibility } from 'wu-framework/services';

const v1 = defineService({ name: 'price', version: '1.0.0', methods: {
  quote: { input: schema.number(), output: schema.number() },
} });
const v2 = defineService({ name: 'price', version: '2.0.0', methods: {
  quote: { input: schema.object({ quantity: schema.number() }),
    output: schema.object({ total: schema.number() }) },
} });
const translators = [{ definition: v1, methods: {
  quote: { input: quantity => ({ quantity }), output: result => result.total },
} }];
const provider = provideService(wu, v2, {
  quote: ({ quantity }) => ({ total: quantity * 12 }),
}, { translators });
try {
  const oldClient = consumeService(wu, v1);
  const newClient = consumeService(wu, v2);
  console.log(await oldClient.quote(2)); // 24
  console.log(await newClient.quote({ quantity: 2 })); // { total: 24 }
  console.log(checkServiceCompatibility(v1, v2, { translators }));
} finally {
  provider.dispose();
}

验证内容

每个转换器声明 definition 以及逐方法适配:input、output,或用 implement 完整处理已删除方法。不变的方法无需转换。WU 在注册时检查覆盖范围,并根据对应版本的 schema 验证每次输入输出。不完整覆盖会产生 WU_SERVICE_TRANSLATOR;结构检查并不证明转换函数保持了业务语义。

checkServiceCompatibility(previous, next, { translators }) 返回 compatible、changes 与 translated。generateServiceTypes 生成客户端声明,sampleValue(schema) 创建确定性测试数据。在 CI 和开发中复用契约,请参阅 CLI 契约 与 测试和 mock。

带版本的 RPC 与对象

wu.handle(channel, handler, { version, translators }) 也支持直接转换。translators 的每个键表示可服务的版本,包含 request 与 response。上下文提供 version、servedVersion 和 translated;WU_RPC_TRANSLATION_FAILED 标明失败阶段。共享服务中,wu.provide 接受用于构建旧对象视图的转换器,wu.consume 通过 __wuVersion 暴露所服务的版本。

一起完善 WU

发现了问题?有新的想法?

你的使用体验能让 WU 变得更好。告诉我们遇到的问题,或支持项目的持续开发。