Serving DMN™ models
The core functionality of the Decision Toolkit is serving models. The specification precisely defines XML interchange format for decision models. XML files containing decision models are loaded and processed by Decision Toolkit server and exposed as a set of JSON API endpoints. Each endpoint represents a single invocable defined in the decision model. Calling an endpoint is equivalent to executing a decision, business knowledge model or decision service.
To explain in details, how to run and use the Decision Toolkit server, we assume that the built-in examples are already saved in the ~/examples directory (see Saving examples for details).
Change to the directory containing the examples:
$ cd ~/examples
Running a server
To run Decision Toolkit as a server, type the following command:
$ dsntk srv
Expected output should look like this:
Found 1 model.
Loaded 1 model.
Deployed 1 invocable.
dsntk 0.0.0.0:22022
Decision Toolkit server is started. This server accepts connections from all available network interfaces 0.0.0.0 and listens on port 22022. During startup, the Decision Toolkit server scans the current directory with all its subdirectories, and searches for decision models stored as XML files with .dmn extension.
In our example, during directory scanning, the Decision Toolkit server has found the dm directory containing one decision model file named dm.dmn. This file was loaded, and one invocable was deployed, a decision named Greeting Message
.
To stop the Decision Toolkit server, press Ctrl+C.
The list of all deployed invocables with endpoint names can be displayed during server startup by specifying the option -v
or --verbose
, like shown below:
$ dsntk srv -v
Found 1 model.
Loaded 1 model.
Deployed 1 invocable.
Deployed invocable:
dm/org/decision-toolkit/greetings/Greeting%20Message
dsntk 0.0.0.0:22022
Evaluating invocables
After starting the Decision Toolkit server, the deployed invocable can be evaluated by calling its endpoint with required input data, using, e.g. curl. In a separate terminal type:
$ curl -s -d '{"Full Name":"Solomon L. Pollack"}' -H "Content-Type: application/json" -X POST http://0.0.0.0:22022/evaluate/dm/org/decision-toolkit/greetings/Greeting%20Message
The expected output should be:
{"data":"Hello Solomon L. Pollack"}
The Decision Toolkit's version of a hello world program could look like this:
$ curl -s -d '{"Full Name":"world"}' -H "Content-Type: application/json" -X POST http://0.0.0.0:22022/evaluate/dm/org/decision-toolkit/greetings/Greeting%20Message
Expected output is:
{"data":"Hello world"}
Endpoint names
The common endpoint for evaluating invocables exposed by the Decision Toolkit server is named evaluate/
.
The full URL of the endpoint is composed of the following parts:
the protocol:
http://
orhttps://
host address:
0.0.0.0
or127.0.0.1
ormy.domain.com/
alikecommon endpoint name:
evaluate/
path built from directory names where the file containing the DMN™ model was found during startup scanning:
dm/
model namespace converted to RDNN-like path:
org/decision-toolkit/
model name:
greetings/
the name of the invocable:
Greeting%20Message
All parts put together give the following URL of the endpoint:
http://127.0.0.1:22022/evaluate/dm/org/decision-toolkit/greetings/Greeting%20Message
While not all characters are legal in URLs, there is %20
between Greeting
and Message
, which represents a space in percent-encoding. See RFC3986 for more details.