WU / DOCSUNIVERSAL MICROFRONTENDS
ES

Evolucionar contratos sin romper clientes

Publica servicios versionados, traduce contratos anteriores y valida entradas y resultados.

Esta página describe WU Framework 4.0.0. Consulta la migración a Framework 4.0 y CLI 1.2 antes de actualizar un proyecto existente.

wu-framework/services define contratos con schemas, valida llamadas y genera clientes. provideService devuelve { dispose }; consumeService devuelve métodos asíncronos. En una app usa context.wu y concede rpc.provide o rpc.call para los canales del servicio. Este ejemplo usa el runtime del host para concentrarse en la traducción.

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();
}

Qué se valida

Cada traductor declara definition y adaptaciones por método: input, output o implement para atender por completo un método retirado. Los métodos sin cambios no necesitan conversión. WU verifica cobertura al registrar y valida cada entrada y salida con el schema de su versión. Una cobertura incompleta produce WU_SERVICE_TRANSLATOR; el chequeo estructural no demuestra que las funciones traduzcan correctamente tu negocio.

checkServiceCompatibility(previous, next, { translators }) devuelve compatible, changes y translated. generateServiceTypes produce declaraciones de cliente y sampleValue(schema) crea un dato determinista para fixtures. Consulta contratos en la CLI y pruebas y mocks para usar el mismo contrato en CI y desarrollo.

RPC y objetos versionados

wu.handle(channel, handler, { version, translators }) también admite traducción directa. Cada clave de translators es una versión servida, con request y response. El contexto identifica version, servedVersion y translated; WU_RPC_TRANSLATION_FAILED identifica la etapa que falló. En servicios compartidos, wu.provide acepta traductores que construyen una vista antigua del objeto; wu.consume expone la versión servida en __wuVersion.

WU SE CONSTRUYE CONTIGO

¿Encontraste un bug? ¿Tienes una idea?

Tu experiencia mejora WU. Cuéntanos qué falla o ayuda a sostener su desarrollo.