Conector Validation
Descripción General
Sección titulada «Descripción General»El conector Validation comprueba cada carga contra una lista de reglas por campo. Cuando una regla falla, la política onInvalid configurada decide si descartar la carga, reenviarla tal cual o etiquetarla con una bandera de validez.
Tipo de Conector: MeddleValidation
Configuración
Sección titulada «Configuración»{ "type": "MeddleValidation", "config": { "onInvalid": "drop", "rules": [ { "key": "temperature", "type": "number", "required": true, "min": -40, "max": 150 }, { "key": "sensor_id", "type": "string", "required": true, "pattern": "^S-[0-9]{4}$" }, { "key": "active", "type": "boolean", "required": false } ] }}Parámetros de Configuración
Sección titulada «Parámetros de Configuración»- rules (obligatorio, mínimo 1): Lista de reglas por campo
- onInvalid (obligatorio): Comportamiento cuando al menos una regla falla —
drop,forwardotag - invalidTag: Clave escrita en la carga en el modo
tag(por defecto_valid)
Campos de la Regla
Sección titulada «Campos de la Regla»- key (obligatorio): Nombre del campo de la carga a verificar
- type (obligatorio):
string,numberoboolean - required: Cuando es
true, un campo ausente hace fallar la regla. Cuando esfalse, un campo ausente omite la regla. - min, max: Rango numérico inclusivo (sólo válido para
type: number) - pattern: Expresión regular (sólo válido para
type: string)
Comprobaciones de Tipo
Sección titulada «Comprobaciones de Tipo»- number — Acepta cualquier valor numérico coercible a
float64(int, float, etc.). Una discrepancia de tipo se reporta como un error. - string — Acepta
stringde Go. Sipatternestá definido, el valor debe coincidir. - boolean — Acepta
boolde Go.
Rango y Patrón
Sección titulada «Rango y Patrón»min / max son inclusivos. Una temperature de exactamente -40 pasa min: -40. Los patrones regex se compilan una vez al inicio con la sintaxis RE2 de Go; los patrones inválidos impiden que el conector arranque.
Políticas On Invalid
Sección titulada «Políticas On Invalid»Modo Drop
Sección titulada «Modo Drop»{ "onInvalid": "drop" }Las cargas que fallan se descartan silenciosamente (los errores siguen apareciendo en el canal de errores). Sólo se reenvían las cargas válidas.
Modo Forward
Sección titulada «Modo Forward»{ "onInvalid": "forward" }Toda carga se reenvía independientemente de su validez. Úsalo sólo para monitoreo.
Modo Tag
Sección titulada «Modo Tag»{ "onInvalid": "tag", "invalidTag": "is_valid"}Las cargas inválidas se reenvían con la clave de etiqueta establecida a false. Las cargas válidas pasan sin cambios. Si invalidTag se omite, la clave por defecto es _valid.
Casos de Uso
Sección titulada «Casos de Uso»- Rechazar lecturas de sensores malformadas antes de que lleguen al almacenamiento
- Forzar convenciones de IDs con patrones regex (ej. tags de activos)
- Filtrado por rango para sensores físicos con envolventes operativas conocidas
- Validación suave con modo
tagpara manejo descendente basado en Router
Ejemplo: Drop Estricto
Sección titulada «Ejemplo: Drop Estricto»{ "type": "MeddleValidation", "config": { "onInvalid": "drop", "rules": [ { "key": "device_id", "type": "string", "required": true, "pattern": "^DEV-[A-Z0-9]+$" }, { "key": "temperature", "type": "number", "required": true, "min": -20, "max": 120 }, { "key": "online", "type": "boolean", "required": true } ] }}Cualquier carga sin un campo, que falle el regex, o con temperature fuera de [-20, 120] se descarta.
Ejemplo: Etiquetar y Enrutar
Sección titulada «Ejemplo: Etiquetar y Enrutar»{ "type": "MeddleValidation", "config": { "onInvalid": "tag", "invalidTag": "is_valid", "rules": [ { "key": "pressure", "type": "number", "required": true, "min": 0, "max": 200 } ] }}Combina con un Router descendente que se ramifique sobre is_valid para enviar las cargas limpias y las sucias a sumideros diferentes.
Mejores Prácticas
Sección titulada «Mejores Prácticas»- Usa
droppara esquemas estrictos en la frontera entre datos confiables y no confiables - Usa
tag+ Router cuando quieras inspeccionar o aislar cargas inválidas en lugar de perderlas - Mantén los patrones regex anclados (
^...$) para evitar coincidencias parciales accidentales - Define rangos numéricos estrechos basados en límites físicos/operativos — esto detecta fallos de sensor temprano
- Coloca Validation cerca del inicio de los pipelines para que los conectores descendentes puedan asumir cargas bien formadas