第 21 章 KIE 服务器 REST API 用于 KIE 容器和业务资产

Red Hat Process Automation Manager 提供了一个 KIE Server REST API,可用于在不使用 Business Central 用户界面的情况下与 Red Hat Process Automation Manager 中的 KIE 容器和业务资产(如业务逻辑、流程和程序)交互。通过这个 API 支持,您可以更有效地维护 Red Hat Process Automation Manager 资源,并使用 Red Hat Process Automation Manager 优化您的集成和开发。

使用 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 并运行以下命令:

$ ./add-user.sh -a --user <USERNAME> --password <PASSWORD> --role kie-server

有关用户角色和 Red Hat Process Automation Manager 安装选项的更多信息,请参阅 规划 Red Hat Process Automation Manager 安装

HTTP 标头

KIE Server REST API 需要以下 HTTP 标头用于 API 请求:

  • 接受 :您请求的客户端接受的数据格式:

    • application/json (JSON)
    • application/xml (用于 JAXB 或 XSTREAM)
  • Content-TypePOSTPUT API 请求数据的数据格式:

    • application/json (JSON)
    • application/xml (用于 JAXB 或 XSTREAM)
  • x-KIE-ContentType: 应用程序/xml XSTREAM API 请求和响应所需的标头:

    • XSTREAM
HTTP 方法

KIE Server REST API 支持以下 HTTP 方法进行 API 请求:

  • 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,以访问 Red Hat Process Automation Manager 中的相应资源或资源类型。

/server/containers/{containerId} 端点的请求 URL 示例

http://localhost:8080/kie-server/services/rest/server/containers/MyContainer

请求参数和请求数据

许多 KIE Server 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=STARTED

HTTP POSTPUT 请求可能还需要请求正文或带有数据的文件来附带请求。

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 Server REST API 发送请求

KIE Server REST API 可让您在不使用 Business Central 用户界面的情况下与 Red Hat Process Automation Manager 中的 KIE 容器和业务资产交互。您可以使用任何 REST 客户端或 curl 工具发送 KIE Server REST API 请求。

先决条件

  • KIE 服务器已安装并运行。
  • 您有对 KIE 服务器的 kie-server 用户角色访问权限。

流程

  1. 识别您要发送请求的相关 API 端点,如 [GET] /server/containers,以从 KIE 服务器检索 KIE 容器。
  2. 在 REST 客户端或 curl 工具中,为对 /server/containersGET 请求输入以下组件。根据您的用例调整任何请求详情。

    对于 REST 客户端:

    • 身份验证 :使用 kie-server 角色输入 KIE 服务器用户的用户名和密码。
    • HTTP 标头 :设置以下标头:

      • 接受:application/json
    • HTTP 方法 :设置为 GET
    • URL :输入 KIE Server REST API 基本 URL 和端点,如 http://localhost:8080/kie-server/services/rest/server/containers

    对于 curl 工具:

    • -u :使用 kie-server 角色输入 KIE 服务器用户的用户名和密码。
    • -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"
  3. 执行请求并查看 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"
            }
          ]
        }
      }
    }
  4. 在本例中,从响应返回的其中一个部署的 KIE 容器复制或记下项目 group-idartifact-idversion (GAV)数据。
  5. 在 REST 客户端或 curl 实用程序中,发送带有以下内容的另外一个 API 请求,它向 /server/containers/{containerId} 发送一个 PUT 请求,以使用复制的项目 GAV 数据部署新的 KIE 容器。根据您的用例调整任何请求详情。

    对于 REST 客户端:

    • 身份验证 :使用 kie-server 角色输入 KIE 服务器用户的用户名和密码。
    • HTTP 标头 :设置以下标头:

      • 接受:application/json
      • content-Type:application/json

        注意

        fields=not_null 添加到 Content-Type 时,null 字段会从 REST API 响应中排除。

    • HTTP 方法 :设置为 PUT
    • URL :输入 KIE Server REST API 基本 URL 和端点,如 http://localhost:8080/kie-server/services/rest/server/containers/MyContainer
    • Request body :使用新 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 服务器用户的用户名和密码。
    • - h :设置以下标头:

      • 接受:application/json
      • content-Type:application/json

        注意

        fields=not_null 添加到 Content-Type 时,null 字段会从 REST API 响应中排除。

    • -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
  6. 执行请求并查看 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 服务器不会将对象 unmarshall 到预期的类型。

    正确的进程实例请求正文

    {
      "id": 4,
      "lease": {
        "com.myspace.restcall.LeaseModel": {
          "annualRent": 109608,
          "isAutoApproved": false
        }
      }
    }

    进程实例请求正文不正确

    {
      "id": 4,
      "lease": {
        "annualRent": 109608,
        "isAutoApproved": false
      }
    }