Es posible crear reglas de negocio en la plataforma gracias al módulo Motor de Reglas definidas en lenguaje DRL (Drools Rule Language).
Existen dos tipos de reglas en plataforma:
- Reglas sobre ontologías: estas reglas se asocian a dos ontologías, ontología 'trigger' y ontología destino, de tal forma que al realizarse una inserción sobre la ontología trigger en la plataforma, la regla es evaluada, y los resultados de la regla son almacenados en la ontología destino.
- Reglas REST: estas reglas no se asocian a ninguna ontología, y son ejecutadas únicamente bajo demanda, realizando una petición REST.
Ambos tipos de regla, trabajan con JSON tanto en entrada como en salida. Este JSON es embebido en una clase Wrapper llamada OntologyJsonWrapper, que más adelante explicaremos como utilizar.
Dominio de Reglas
Para crear las reglas, deberás acceder a tu dominio del Motor de Reglas a través del menú:
Aquí aparecerá nuestro dominio asociado sobre el que podemos crear reglas. Por defecto estará arrancado. Si lo paras, tus reglas definidas sobre ontologías no serán ejecutadas automáticamente.
Accede a tu directorio de reglas a través del icono del ojo. En esta vista aparecerán todas tus reglas, y podrás editar el código de las mismas, testearlas, (des)habilitarlas, editar ontologías asociadas, e incluso borrarlas.
Para editar el DRL, simplemente se realiza modificación del código y pulsar 'Edit'. Si al actualizar la regla se encuentra algún error en la sintaxis, se mostrará un error como el siguiente y la regla no será actualizada:
Para realizar una prueba de la regla, pulsa el botón de 'Test' y se abrirá un pop-up donde tendrás que introducir un JSON de entrada y después volver a pulsar el botón 'Test':
Esta utilidad permite testear las reglas simulando entrada de datos de ontología en la plataforma.
Si quieres (des)habilitar, editar o borrar una regla, debes hacer click derecho sobre la regla en el menú de navegación:
Las reglas que tengamos deshabilitadas aparecerán en gris en el menú:
Creación de Reglas
Para crear una regla, pulsamos sobre el botón 'Create'. Aquí podremos indicar el tipo de regla que queremos, asociar las ontologías si procede, e implementar la lógica de la propia regla.
Para la lógica de la regla se proporciona este enlace, donde se explica la sintaxis del DRL.
Variables de entrada y salida de la regla
Como mencionábamos antes, para la entrada y salida de datos en la regla, se utiliza una clase Wrapper (OntologyJsonWrapper). Esta clase proporciona una API simple para trabajar con sus atributos JSON. Los diferentes métodos disponibles están detallados en verde (comentario) en la regla ejemplo que aparece en el editor a la hora de la creación:
Variable de entrada -> input
Variable de salida -> output
Es importante mencionar, que si la ontología destino contiene un Nodo JSON raíz, se deberá indicar tal que:
De lo contrario, los datos de salida de la regla fallarán la validación a la hora de insertarlos.
Flexibilidad DRL
El lenguaje DRL permite trabajar con código Java en el segmento "then" , por lo que podemos inyectar código Java para realizar acciones, por ejemplo, enviar una petición REST (no olvidar los import, de lo contrario la regla no pasará la compilación).
API REST
Para cualquier regla y en particular para las de tipo REST, existe un endpoint para ejecutar una regla bajo demanda:
URL: https://{URL_ENTORNO}/rules-engine/execute/rule/:identificacion -> identification es el nombre de la regla p.ej. RULE_SENSOR_ALERT
Método HTTP: POST
Cabeceras: Authentication -> Bearer token Oauth2 de plataforma.
Cuerpo petición: JSON