Dans le précedent post sur ce blog nous avons vu rapidement comment créer sa définition et modelisation des règle d’un KYC basé sur le standard DMN. Nous allons voir comment faire tourner cet exemple et éxecuter sur un moteur implémentant le standard DMN.
Éxecution d’un moteur KYC en DMN avec Kogito
Introdution Kogito
Faisons un focus rapide sur Kogito. Kogito est un moteur de règle orienté cloud. Ce moteur de règle reprend en grande partie tout le coeur et le developpement de Drools et jBPM mais propose des fonctionnalités purement Cloud notamment le fait qu’il est prévu d’être éxecuter dans un container de type OCI / Docker et deployé sur un cluster Cloud K8S / Openshift par exemple.
Business Domain first approach
Un apport de Kogito au moteur Drools, c’est qu’il génére automatiquement l’API REST des règles DMN. Dans notre exemple nous allons copier/coller le fichier DMN KYC du post précédent et le faire tourner tel quel avec Kogito. Kogito va proposer une API KYC
acceptant le model des Input
. Il sera donc possible de faire un appel REST / HTTP avec des données métiers sans tout le liant technique que nous aurions pu avoir avec l’implémentation purement Drools. Nous allons avoir donc une API orientée métier dépourvue de spécificité technique.
Execution du projet
Afin de pourvoir éxecuter le modele de règle KYC dans moteur Kogito il va falloir cloner le repository disponible sur Github.
Compilation
> git clone --depth 1 --branch blog https://github.com/gautric/dmn-knative.git
> cd dmn-knative
Execution
Nous allons copier le fichier KYC.dmn que nous avons fait dans le post précédent.
> curl -L https://raw.githubusercontent.com/gautric/dmn-knative/master/src/main/resources/KYC.dmn \
-o src/main/resources/KYC.dmn 2> /dev/null
> mvn clean package quarkus:dev
... OMIT ...
__ ____ __ _____ ___ __ ____ ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2020-06-05 17:22:27,522 INFO [io.quarkus] (main) dmn-knative 1.0-SNAPSHOT (powered by Quarkus 1.3.2.Final) started in 3.600s. Listening on: http://0.0.0.0:8080
2020-06-05 17:22:27,525 INFO [io.quarkus] (main) Profile dev activated. Live Coding activated.
2020-06-05 17:22:27,526 INFO [io.quarkus] (main) Installed features: [cdi, kogito, resteasy, resteasy-jackson, smallrye-openapi, swagger-ui]
Swagger
Dès que vous avez correctment la sortie standard précédente, il est possible d’accéder à l’URL suivante : http://localhost:8080/
Vous allez atterrir sur la page swagger du moteur Kogito, une API KYC est disponible et peut être utilisée directement via cette page ou bien un appel CURL.
L’appel CURL
> export DMN_URL=http://localhost:8080
> curl -X POST -H "Content-Type: application/json" ${DMN_URL}/KYC --data-binary @- << EOF 2> /dev/null | jq
{
"Amount": 250000,
"PEP": false,
"Fiscal Residency": "JP"
}
EOF
Attention la commande précédente utilise l’outil jq
Vous devriez obtenir le résultat suivant :
{
"Amount Rule": "MEDIUM",
"KYC": 25,
"Fiscal Residency Rule": "LOW",
"Amount": 250000,
"PEP Rule": "LOW",
"PEP": false,
"Level": "function Level( input )",
"Fiscal Residency": "JP"
}
Nous voyons qu’avec Kogito le détail de tous les calculs intermédiaires des Decision
est disponible, jusqu’au calcul final au niveau de la valeur KYC ici dans notre exemple ci-dessus. Cela est intéressant à la fois pour du debugging ou bien pour une problématique d’auditabilité du moteur.
Exemples
Des exemples sont disponibles dans le répertoire data
du projet que l’on vient de cloner.
Conclusion
Avec cette exemple, nous voyons que la complexité technique d’utiliser un moteur DMN est très faible via Kogito qui propose directement une API métier. Il n’y a plus d’excuse pour ne pas utiliser à minima le standard DMN
dans vos applications. Le projet Kogito est encore récent mais rien ne vous empeche de proposer des améliorations et/ou suggestions.