7.3. 使用 KIE 服务器 REST API 执行 DMN 服务
与 KIE 服务器的 REST 端点直接交互,提供调用代码和决策逻辑定义之间的最分离。调用代码完全没有直接依赖项,您可以在一个完全不同的开发平台(如 Node.js 或 .NET )中实施。本节中的示例演示 Nix 风格的 curl 命令,但提供相关信息来适应任何 REST 客户端。
当您使用 KIE 服务器的 REST 端点时,最佳实践是定义一个域对象 POJO Java 类,使用标准 KIE 服务器 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 服务器中:
mvn clean install
mvn clean installCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有关项目打包和部署以及可执行模型的更多信息,请参阅打包和部署 Red Hat Process Automation Manager 项目。
- 您有包含 DMN 模型的 KIE 容器的 ID。如果存在多个模型,还必须知道相关模型的型号命名空间和型号名称。
流程
确定用于访问 KIE 服务器 REST API 端点的基础 URL。这需要了解以下值(使用默认本地部署值作为示例):
-
主机(
本地主机) -
端口(
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}/dmncurl 请求示例:
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}/dmncurl 请求示例:
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 请求示例(JAXB 格式):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意无论请求格式如何,请求都需要以下元素:
- 型号命名空间
- 型号名称
- 包含输入值的上下文对象
JSON 响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow XML(JAXB 格式)响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow