5.3. 使用 KIE 服务器 REST API 执行 DMN 服务
直接与 KIE 服务器的 REST 端点交互,可在调用代码和决策逻辑定义之间提供最大的隔离。调用代码完全免费直接依赖项,您可以在完全不同的开发平台(如 Node.js
或 .NET
)中实施它。本节中的示例演示了 Nix 风格的 curl 命令,但提供相关信息以适应任何 REST 客户端。
当您使用 KIE 服务器的 REST 端点时,最佳实践是定义一个域对象 POJO Java 类,使用标准 KIE Server marshalling 注解进行注解。例如,以下代码使用正确注解的域对象 Person
类:
POJO Java 类示例
有关 KIE Server REST API 的更多信息,请参阅使用 KIE API 与 Red Hat Process Automation Manager 交互。
先决�件
-
KIE 服务器已安装并配置,包括具有
kie-server
角色的用户的已知用户名和凭证。有关安装选项,请参阅 规划 Red Hat Process Automation Manager 安装。 您已将 DMN 项目构建为 KJAR 工件,并将其部署到 KIE 服务器中。理想情况下,您已将 DMN 项目构建为可执行模型,以便更有效地执行:
mvn clean install -DgenerateDMNModel=yes
mvn clean install -DgenerateDMNModel=yes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关项目打包和部署以及可执行模型的更多信息,请参阅打包和部署 Red Hat Process Automation Manager 项目。
- 您有包含 DMN 模型的 KIE 容器的 ID。如果有多个模型,还必须知道相关模型的模型命名空间和模型名称。
�程
确定用于访问 KIE 服务器 REST API 端点的基本 URL。这需要了解以下值(默认本地部署值作为示例):
-
主机(
localhost
) -
端口(
8080
) -
根上下文(
kie-server
) -
基本 REST 路径(
services/rest/
)
本地部署中的基本 URL 示例:
http://localhost:8080/kie-server/services/rest/
-
主机(
确定用户身份验证要求。
当在 KIE 服务器配置中直接定义用户时,会使用 HTTP 基本身份验证,并且需要用户名和密码。成功请求要求用户具有
kie-server
角色。以下示例演示了如何在 curl 请求中添加凭证:
curl -u username:password <request>
curl -u username:password <request>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用 Red Hat Single Sign-On 配置 KIE 服务器,请求必须包含 bearer 令牌:
curl -H "Authorization: bearer $TOKEN" <request>
curl -H "Authorization: bearer $TOKEN" <request>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定请求和响应的格式。REST API 端点可用于 JSON 和 XML 格式,并使用请求标头设置:
JSON
curl -H "accept: application/json" -H "content-type: application/json"
curl -H "accept: application/json" -H "content-type: application/json"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow XML
curl -H "accept: application/xml" -H "content-type: application/xml"
curl -H "accept: application/xml" -H "content-type: application/xml"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)查询容器以获取部署的决策模型列表:
[GET]
server/containers/{containerId}/dmn
curl 请求示例:
curl -u krisv:krisv -H "accept: application/xml" -X GET "http://localhost:8080/kie-server/services/rest/server/containers/MovieDMNContainer/dmn"
curl -u krisv:krisv -H "accept: application/xml" -X GET "http://localhost:8080/kie-server/services/rest/server/containers/MovieDMNContainer/dmn"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow XML 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow JSON 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 执行模型:
[POST]
server/containers/{containerId}/dmn
curl 请求示例:
curl -u krisv:krisv -H "accept: application/json" -H "content-type: application/json" -X POST "http://localhost:8080/kie-server/services/rest/server/containers/MovieDMNContainer/dmn" -d "{ \"model-namespace\" : \"http://www.redhat.com/_c7328033-c355-43cd-b616-0aceef80e52a\", \"model-name\" : \"dmn-movieticket-ageclassification\", \"decision-name\" : [ ], \"decision-id\" : [ ], \"dmn-context\" : {\"Age\" : 66}}"
curl -u krisv:krisv -H "accept: application/json" -H "content-type: application/json" -X POST "http://localhost:8080/kie-server/services/rest/server/containers/MovieDMNContainer/dmn" -d "{ \"model-namespace\" : \"http://www.redhat.com/_c7328033-c355-43cd-b616-0aceef80e52a\", \"model-name\" : \"dmn-movieticket-ageclassification\", \"decision-name\" : [ ], \"decision-id\" : [ ], \"dmn-context\" : {\"Age\" : 66}}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow JSON 请求示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow XML 请求示例(DSLB 格式):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意无论请求格式是什么,请求需要以下元素:
- 模型命名空间
- ���称
- 包含输入值的上下文对象
JSON 响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow XML (DSLB 格式)响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow