第 21 章 KIE 服务器 REST API 用于 KIE 容器和业务资产
Red Hat Process Automation Manager 提供了一个 KIE Server REST API,您可以在不使用 Business Central 用户界面的情况下与 KIE 容器和业务资产(如业务规则、流程和解决器)进行交互。通过此 API 支持,您可以更有效地维护红帽流程自动化管理器资源,并优化您的与红帽流程自动化管理器的集成和开发。
使用 KIE Server REST API,您可以执行以下操作:
- 部署或分离 KIE 容器
- 检索和更新 KIE 容器信息
- 返回 KIE 服务器状态和基本信息
- 检索和更新业务资产信息
- 执行业务资产(如规则和流程)
KIE Server REST API 请求需要以下组件:
- 身份验证
KIE Server REST API 需要 HTTP 基本身份验证或基于令牌的身份验证,用于用户角色
kie-server。要查看为您的 Red Hat Process Automation Manager 分发配置的用户角色,请导航到~/$SERVER_HOME/standalone/configuration/application-roles.properties和~/application-users.properties。要添加具有
kie-server角色的用户,请导航到~/$SERVER_HOME/bin,再运行以下命令:$ ./bin/jboss-cli.sh --commands="embed-server --std-out=echo,/subsystem=elytron/filesystem-realm=ApplicationRealm:add-identity(identity=<USERNAME>),/subsystem=elytron/filesystem-realm=ApplicationRealm:set-password(identity=<USERNAME>, clear={password='<PASSWORD>'}),/subsystem=elytron/filesystem-realm=ApplicationRealm:add-identity-attribute(identity=<USERNAME>, name=role, value=['kie-server'])"有关用户角色和 Red Hat Process Automation Manager 安装选项的更多信息,请参阅 规划 Red Hat Process Automation Manager 安装。
- HTTP 标头
KIE Server REST API 需要以下用于 API 请求的 HTTP 标头:
接受: 请求客户端接受的数据格式:-
application/json(JSON) -
application/xml(XML,用于 JAXB 或 XSTREAM)
-
Content-Type:POST或PUTAPI 请求数据的数据格式:-
application/json(JSON) -
application/xml(XML,用于 JAXB 或 XSTREAM)
-
X-KIE-ContentType:application/xmlXSTREAM API 请求和响应所需的标头:-
XSTREAM
-
- HTTP 方法
KIE 服务器 REST API 支持以下 API 请求的 HTTP 方法:
-
GET:从指定的资源端点检索指定的信息 -
POST:更新资源或资源实例 -
PUT:更新或创建资源实例 -
DELETE:删除资源或资源实例
-
- 基本 URL
-
KIE 服务器 REST API 请求的基本 URL 是
http://SERVER:PORT/kie-server/services/rest/,如http://localhost:8080/kie-server/services/rest/。 - Endpoints
KIE Server REST API 端点(如指定 KIE 容器的
/server/containers/{containerId})是您附加到 KIE Server REST API 基础 URL 的 URI,以访问红帽流程自动化管理器中的相应资源或资源类型。/server/containers/{containerId}端点的请求 URL 示例http://localhost:8080/kie-server/services/rest/server/containers/MyContainer- 请求参数和请求数据
许多 KIE 服务器 REST API 请求需要请求 URL 路径中的特定参数来识别或过滤特定资源并执行特定操作。您可以在端点中添加 URL 参数,格式为
?<PARAM>=<VALUE>&<PARAM>=<VALUE>。带有参数的 GET 请求 URL 示例
http://localhost:8080/kie-server/services/rest/server/containers?groupId=com.redhat&artifactId=Project1&version=1.0&status=STARTEDHTTP
POST和PUT请求可能还需要请求正文或文件,并附带请求。POST 请求 URL 和 JSON 请求正文数据示例
http://localhost:8080/kie-server/services/rest/server/containers/MyContainer/release-id{ "release-id": { "artifact-id": "Project1", "group-id": "com.redhat", "version": "1.1" } }
21.1. 使用 REST 客户端或 curl 工具使用 KIE 服务器 REST API 发送请求 复制链接链接已复制到粘贴板!
KIE 服务器 REST API 允许您在红帽流程自动化管理器中与 KIE 容器和业务资产(如业务规则、流程和解决程序)交互,而无需使用 Business Central 用户界面。您可以使用任何 REST 客户端或 curl 工具发送 KIE 服务器 REST API 请求。
先决条件
- KIE 服务器已安装并运行。
-
您有
kie-server用户角色对 KIE 服务器的访问权限。
流程
-
找到您要发送请求的相关 API 端点,如
[GET] /server/containers从 KIE Server 检索 KIE 容器。 在 REST 客户端或 curl 工具中,输入到
/server/containers的GET请求的以下组件。根据您的用例调整任何请求详情。对于 REST 客户端:
-
身份验证 :使用
kie-server角色输入 KIE Server 用户的用户名和密码。 HTTP Headers :设置以下标头:
-
接受:application/json
-
-
HTTP 方法 :设置为
GET。 -
URL :输入 KIE Server REST API 基础 URL 和端点,如
http://localhost:8080/kie-server/services/rest/server/containers。
对于 curl 工具:
-
-u:使用kie-server角色输入 KIE Server 用户的用户名和密码。 -h : 设置以下标头:-
接受:application/json
-
-
-x:设置为GET。 -
URL :输入 KIE Server REST API 基础 URL 和端点,如
http://localhost:8080/kie-server/services/rest/server/containers。
curl -u 'baAdmin:password@1' -H "Accept: application/json" -X GET "http://localhost:8080/kie-server/services/rest/server/containers"-
身份验证 :使用
执行请求并查看 KIE 服务器响应。
服务器响应示例(JSON):
{ "type": "SUCCESS", "msg": "List of created containers", "result": { "kie-containers": { "kie-container": [ { "container-id": "itorders_1.0.0-SNAPSHOT", "release-id": { "group-id": "itorders", "artifact-id": "itorders", "version": "1.0.0-SNAPSHOT" }, "resolved-release-id": { "group-id": "itorders", "artifact-id": "itorders", "version": "1.0.0-SNAPSHOT" }, "status": "STARTED", "scanner": { "status": "DISPOSED", "poll-interval": null }, "config-items": [], "container-alias": "itorders" } ] } } }-
在本例中,复制或记下来自其中一个部署的 KIE 容器的项目
group-id、artifact-id和版本(GAV)数据。 在 REST 客户端或 curl 实用程序中,发送带有以下内容的另外一个 API 请求,它向
/server/containers/{containerId}发送一个PUT请求,以使用复制的项目 GAV 数据部署新的 KIE 容器。根据您的用例调整任何请求详情。对于 REST 客户端:
-
身份验证 :使用
kie-server角色输入 KIE Server 用户的用户名和密码。 HTTP 标头 :设置以下标头:
-
接受:application/json Content-Type:application/json注意当您将
fields=not_null添加到Content-Type时,会从 REST API 响应中排除 null 字段。
-
-
HTTP 方法 :设置为
PUT。 -
URL :输入 KIE Server REST API 基础 URL 和端点,如
http://localhost:8080/kie-server/services/rest/server/containers/MyContainer。 - 请求正文 :添加带有新 KIE 容器的配置项的 JSON 请求正文:
{ "config-items": [ { "itemName": "RuntimeStrategy", "itemValue": "SINGLETON", "itemType": "java.lang.String" }, { "itemName": "MergeMode", "itemValue": "MERGE_COLLECTIONS", "itemType": "java.lang.String" }, { "itemName": "KBase", "itemValue": "", "itemType": "java.lang.String" }, { "itemName": "KSession", "itemValue": "", "itemType": "java.lang.String" } ], "release-id": { "group-id": "itorders", "artifact-id": "itorders", "version": "1.0.0-SNAPSHOT" }, "scanner": { "poll-interval": "5000", "status": "STARTED" } }对于 curl 工具:
-
-u:使用kie-server角色输入 KIE Server 用户的用户名和密码。 -h :设置以下标头:-
接受:application/json Content-Type:application/json注意当您将
fields=not_null添加到Content-Type时,会从 REST API 响应中排除 null 字段。
-
-
-x:设置为PUT。 -
URL :输入 KIE Server REST API 基础 URL 和端点,如
http://localhost:8080/kie-server/services/rest/server/containers/MyContainer。 -
-d:添加 JSON 请求正文或文件(@file.json),其中包含新 KIE 容器的配置项:
curl -u 'baAdmin:password@1' -H "Accept: application/json" -H "Content-Type: application/json" -X PUT "http://localhost:8080/kie-server/services/rest/server/containers/MyContainer" -d "{ \"config-items\": [ { \"itemName\": \"RuntimeStrategy\", \"itemValue\": \"SINGLETON\", \"itemType\": \"java.lang.String\" }, { \"itemName\": \"MergeMode\", \"itemValue\": \"MERGE_COLLECTIONS\", \"itemType\": \"java.lang.String\" }, { \"itemName\": \"KBase\", \"itemValue\": \"\", \"itemType\": \"java.lang.String\" }, { \"itemName\": \"KSession\", \"itemValue\": \"\", \"itemType\": \"java.lang.String\" } ], \"release-id\": { \"group-id\": \"itorders\", \"artifact-id\": \"itorders\", \"version\": \"1.0.0-SNAPSHOT\" }, \"scanner\": { \"poll-interval\": \"5000\", \"status\": \"STARTED\" }}"curl -u 'baAdmin:password@1' -H "Accept: application/json" -H "Content-Type: application/json" -X PUT "http://localhost:8080/kie-server/services/rest/server/containers/MyContainer" -d @my-container-configs.json-
身份验证 :使用
执行请求并查看 KIE 服务器响应。
服务器响应示例(JSON):
{ "type": "SUCCESS", "msg": "Container MyContainer successfully deployed with module itorders:itorders:1.0.0-SNAPSHOT.", "result": { "kie-container": { "container-id": "MyContainer", "release-id": { "group-id": "itorders", "artifact-id": "itorders", "version": "1.0.0-SNAPSHOT" }, "resolved-release-id": { "group-id": "itorders", "artifact-id": "itorders", "version": "1.0.0-SNAPSHOT" }, "status": "STARTED", "scanner": { "status": "STARTED", "poll-interval": 5000 }, "config-items": [], "messages": [ { "severity": "INFO", "timestamp": { "java.util.Date": 1540584717937 }, "content": [ "Container MyContainer successfully created with module itorders:itorders:1.0.0-SNAPSHOT." ] } ], "container-alias": null } } }如果您遇到请求错误,请检查返回的错误消息并相应地调整您的请求。
处理实例的 REST API 请求对于将复杂数据对象发送到进程实例端点
/server/containers/{containerId}/processes/{processId}/instances的 REST API 请求,请确保在请求正文中包含完全限定类名称(如com.myspace.Person)或简单类名称(如Person)。请求正文需要类名称映射到 Red Hat Process Automation Manager 中的正确业务对象。如果您从请求中排除类名称,KIE Server 不会将对象卸载到预期的类型。进程实例的正确请求正文
{ "id": 4, "lease": { "com.myspace.restcall.LeaseModel": { "annualRent": 109608, "isAutoApproved": false } } }进程实例的请求正文不正确
{ "id": 4, "lease": { "annualRent": 109608, "isAutoApproved": false } }