Escribe tu primer plugin backend
|
Objetivos del capítulo
|
El primer plugin: sazon-status
Hora de cocinar algo: vamos a escribir un plugin que expone el estado de cada servicio de Sazón Foods. Como una pizarra en la cocina donde el jefe anota si cada plato está listo. La pizarra se sirve vía HTTP, validada con Zod y protegida por auth.
Construimos el plugin @sazon/plugin-sazon-status-backend en el crate del capítulo.
Anatomía de un plugin backend
Un plugin backend tiene tres piezas mínimas:
Unresolved directive in chapters/cap-06-primer-plugin-backend.adoc - include::../../chapters/chapter-06-backend-plugin/src/plugin.ts[tag=plugin-skeleton]
|
Qué acabas de ver
|
El router con Zod
Cada endpoint se valida con un esquema Zod. Si la entrada no cumple, lanzamos InputError y un middleware global lo convierte en 400.
Unresolved directive in chapters/cap-06-primer-plugin-backend.adoc - include::../../chapters/chapter-06-backend-plugin/src/router.ts[tag=router-zod]
|
¿Por qué Zod?
El :apéndice F repasa TypeScript básico si vienes de otro lenguaje. |
Middleware de autenticación
Cualquier endpoint serio necesita saber quién llama. Usamos HttpAuthService para extraer el Principal:
Unresolved directive in chapters/cap-06-primer-plugin-backend.adoc - include::../../chapters/chapter-06-backend-plugin/src/router.ts[tag=auth-middleware]
|
401 vs 403
Si tienes RBAC configurado (ver :cap-14), usa el |
Tests con supertest
Probar routers Express sin levantar un servidor real es trivial con supertest:
Unresolved directive in chapters/cap-06-primer-plugin-backend.adoc - include::../../chapters/chapter-06-backend-plugin/src/__tests__/router.test.ts[tag=supertest-tests]
|
Fakes vs mocks
En el test usamos fakes (objetos simples que cumplen la interfaz) en lugar de mocks con |
Registrar el plugin en el backend
Una vez escrito, lo registramos en el index.ts:
backend.add(import('@sazon/plugin-sazon-status-backend'));
-
Crea el paquete
plugins/sazon-status-backendconcreate-backend-plugin. -
Define
createRouter()con Express + Zod. -
Aplica
HttpAuthServicea los endpoints sensibles. -
Escribe tests con supertest y fakes.
-
Registra con
backend.add(import('@sazon/plugin-sazon-status-backend')).
Resumen
-
Un plugin backend =
createBackendPlugin()+createRouter()conHttpRouterService. -
Zod valida entradas;
InputErrorse traduce a 400 vía middleware. -
HttpAuthService.credentials()+getPrincipal()da la identidad del cliente. -
supertestpermite testear routers sin servidor real.
Glosario del capítulo
- Zod
-
Librería de validación de esquemas para TypeScript con inferencia de tipos.
- Principal
-
Objeto que representa al usuario autenticado (subject, type).
- supertest
-
Librería para testear servidores HTTP sin levantarlos (fake app).
- fake
-
Implementación ligera que cumple un contrato, usada en tests.
Próximo capítulo
Persistencia, eventos y auth flow en el backend —de HTTP plano a Knex, EventsService y protección de endpoints con HttpAuthService.