restful集成规范
为了构建一个简单而有效的Web客户端,许多公司都采用了代表性状态转移(REST)架构来替代基于WSDL的Web服务。 结果,通过其REST API集成外部系统的需求增加了。
在IBM Process Designer中,可以使用内置的Web服务集成来发现基于WSDL的Web服务并轻松地对其进行集成。 但是,RESTful Web服务(REST服务)没有WSDL,因此不能使用Web服务集成来使用REST服务。 有很多建议的方法可以使用Dojo Toolkit在Process Designer中集成REST服务,这需要一定程度的知识来编写脚本。
IBM Business Process Manager(BPM)标准旨在为典型的业务流程管理项目提供快速的价值实现时间,而IBM BPM Advanced提供了一套完整的业务流程管理功能,包括广泛的企业范围服务集成。 因此,您的整体面向服务的体系结构(SOA)解决方案应在高级层中实现系统集成逻辑,而您的业务应用程序a应专注于交付业务价值。
本文的目的是通过使用服务组件体系结构(SCA)HTTP绑定将系统集成层与业务层分开,以介绍IBM Business Process Manager V8.0.1 Advanced中的RESTful Web服务集成。
业务场景
为了改善当前流程,一家企业决定构建一个SOA解决方案,该解决方案使用BPM V8.0.1 Advanced集成其所有现有系统。 一些约束是:
- 每个系统都必须遵守公司范围内的数据架构,该架构非常复杂并且具有层次结构。
- 这些系统之一只能通过其REST API来调用。
- 资源有限的快速发展周期。
SOA参考体系结构(SOA RA)(图1)讨论了为企业设计SOA解决方案时需要考虑的九个关键类和职责。
图1. SOA参考架构
SOA原则是将业务层与技术服务层分离。 在使用IBM Business Process Manager Advanced将业务流程和企业服务链接在一起的文章中,作者讨论了BPM Advanced中业务和技术服务的分离。
基于SOA原理,本文中的解决方案将业务流程作为IBM Process Designer中的业务流程定义(BPD)实施。 REST服务集成服务作为SCA应用程序作为高级集成服务(AIS)公开给BPD。
图2.高层架构
IBM Integration Designer提供了开发环境,以实现提供REST集成的SCA应用程序。 因为SCA是中间件层,所以它提供了处理高度复杂的XML模式的能力,如果不进行自定义转换,它可能会在Process Designer中引发错误。 在调用REST API之前,可以将BPD使用的业务对象映射到SCA中的标准架构格式。
可以使用IBM Integration Designer的内置功能来实现该解决方案,从而消除了对定制编码的需求。
实施解决方案的步骤概述
端到端解决方案的开发涉及以下步骤:
- 创建一个工具箱
- 在Integration Designer中实施AIS:
- 导入标准架构并定义接口
- 创建一个SCA导出 ,它将在Process Designer中作为AIS公开
- 创建SCA HTTP导入以调用外部REST API
- 实现中介流组件(MFC)并将业务对象映射到公司架构
- 单元测试SCA应用程序
- 通过AIS调用REST服务
- 在流程应用程序中调用AIS
创建一个工具箱
系统集成实现应可在多个流程应用程序中使用,以实现可重用性。 因此,应该在工具箱中定义AIS。
- 启动Integration Designer并通过单击“ 打开透视图”图标连接到Process Center,然后选择Process Center 。
图3.切换到Process Center透视图
- 输入Process Center URL,用户名和密码,然后单击“ 登录”进行连接。
图4. Process Center登录
- 选择“ 工具箱”选项卡,然后单击“ 创建新工具箱” 。
- 提供要使用的工具箱名称和首字母缩写词,然后单击“ 创建” 。
图5.创建一个新的工具箱
- 选择“ 在工作空间中打开”以在“业务集成”透视图中打开工具箱。
- 在“工作区中的打开流程应用程序或工具包”对话框中,单击“ 确定” 。 该工具会在
REST_AIS_TK
自动创建两个新项目,如图6所示:REST_AIS_TK_Implementation
和REST_AIS_TK_Library
。图6.在工作区中打开
如果现有的工具包定义了要在多个流程应用程序中使用的通用业务对象,则可以将依赖项添加到工具包中,以便可以在实现中使用它们。
图7.通用业务对象工具包
您必须先在流程设计器中添加依赖项,然后返回到集成设计器以在工作区中打开工具箱。 在另一个工具箱中定义的业务对象是不可修改的,但是您可以在实现中使用它们。
在<Toolkit_name>_Library
中定义的业务对象在Process Designer中可见(在本示例中为REST_AIS_TK_Library
)。 如果行业标准架构或公司架构包含Process Designer不支持的XML构造,则必须定义一个单独的库,该库对于Process Designer是不可见的。
注意 :如果没有要使用的预定义架构,请忽略以下步骤1到13,然后跳到“ 定义接口”部分。
- 选择File => New => Library ,然后提供库名称,例如
Schema_Library
。 - 单击下一步 。 应该选择“ 选择流程应用程序或工具箱”复选框。 确保流程应用程序或工具箱名称正确(例如
REST_AIS_TK
)。 - 点击完成 。
- 右键单击新创建的库,然后从列表中选择“ 导入 ”。
- 展开业务集成,然后选择WSDL和XSD 。
图8.导入现有的模式文件
- 单击下一步 。
- 如果您具有模式的本地副本,请选择本地WSDL或XSD文件,或者选择两者 ,然后单击下一步 。
- 导航到架构文件的位置,然后单击“ 完成” 。 这将基于描述数据类型的XML模式生成业务对象。
图9.从XML模式派生的业务对象
- 在“问题”视图中可能会出现一些错误。 右键单击Schema_Library并选择Properties 。
- 展开“ 业务集成”,然后选择“ 库镜像” 。 确保未选中“将库与Process Center关联后立即对其进行镜像”复选框。
图10.库镜像属性
注意 :通过不镜像该库,可以对Process Designer隐藏任何复杂性。 有关更多详细信息,请参阅文章“ 一起使用IBM Integration Designer和IBM Process Designer时的最佳实践 ”中的“最佳实践:保护工具包中的镜像工件”。
- 在“业务集成”视图中,展开REST_AIS_TK_Implementation并双击“ 依赖关系”以打开依赖关系编辑器。
图11. SCA模块依赖性
- 单击添加,然后添加Schema_Library 。
- 单击Ctrl + S保存更改。 这允许
REST_AIS_TK_Implementation
模块使用从架构生成的业务对象。
定义接口
该设计使用SCA HTTP导入来调用目标REST服务。 第一步是为SCA导入和SCA导出组件定义接口。 与基于WSDL的Web服务不同,REST服务没有接口。 您将在本节中定义的接口用于SCA组件。
SCA导出成为Process Designer中的AIS服务。 为了设置BPD和AIS之间的服务合同,导出组件必须具有一个接口,以定义BPD要使用的输入和输出消息。
图12. SCA组装图示例
同样,具有HTTP绑定的SCA导入是一个SCA工件,它必须具有接口,尽管目标REST服务未定义与其关联的WSDL。 此接口用作SCA组件之间的协定。 因此,您应该设置有意义的接口名称及其操作。 请注意,输入和输出消息类型必须与目标REST服务期望的类型完全匹配。 如果您已有定义输入和输出类型的XML模式,则操作的输入和输出类型必须是在Schema_Library步骤中导入的模式类型。
- 在“业务集成”视图中的REST_AIS_TK_Implementation下,右键单击Interfaces并选择New => Interface 。
图13.创建一个新界面
- 输入新接口的名称,然后单击“ 完成” 。
- 单击添加请求响应操作图标以添加要调用的REST服务的定义。
图14.添加请求-响应操作
注意 :此示例使用从导入现有XML架构派生的业务对象:
getCompanyInfoReq
和getCompanyInfoResponse
。 - 根据公司模式指定输入和输出的数据类型。
- 选择“ 更改装订样式以记录未包装的文字”以更改装订样式。
图15.更改WSDL绑定样式
- 在“更改绑定样式”对话框中单击“ 是 ”以继续更改。 绑定样式应该已经从文档文字包裹式变为非 文字 文档包裹式 。
- 单击Ctrl + S进行保存。
调用REST服务时,必须完全按照目标服务的预期来构造请求。 因此,您不想使用文档文字包装选项,该选项将元素包装为相应的操作名称。 而是使用文档文字非包装绑定,以使生成的XML不会包含多余的标记,这会导致运行时错误。
- 在Business Integration视图,REST_AIS_TK_Library下用鼠标右键单击接口来创建AIS的一个接口。
- 添加请求-响应操作。 请记住,该界面在Process Designer中可见。 因此,操作的名称应该简单明了。
- 如果要处理Process Designer不支持的复杂模式,则必须定义一个简化的业务对象。 右键单击Type下的字符串 ,然后选择New定义新的业务对象。
图16.添加一个新的业务对象
如果有一个工具包包含要在流程应用程序和工具包中使用的通用业务对象,则可以将该工具包作为依赖项添加到AIS工具包中。 这使您可以使用在流程设计器中定义的业务对象。
例如,标准架构可能具有如图17所示的复杂结构。
图17. XML模式生成的业务对象示例
您可能希望使用可被Process Designer中的BPD使用的简单类型来简化业务对象,以便Coach可以轻松显示数据。 例如,无法在Process Designer中正确解析具有xs:enumeration
和xs:choice
的XML模式。 相反,您可能想在Coach中添加输入检查,并使业务对象保持简单,如图18所示。
图18.业务对象示例
注意 :如果您已通过依赖关系将公共业务对象添加到项目中,如图7所示,则可以单击“ 浏览”选择一个现有业务对象,而不是创建一个新的业务对象。
REST_AIS_TK_Implementation
下定义的接口在Process Designer中不可见; 因此,您可以使用不受支持的数据类型和架构。 但是,在REST_AIS_TK_Library
下定义的接口和业务对象在Process Designer中可见。 因此,您应该设计接口和业务对象,以使业务流程开发人员可以清楚地使用它们。
图19.业务集成视图
- 单击Ctrl + S进行保存。
创建SCA导出
在上一节中,您定义了一个界面来解释您的AIS服务。 在本部分中,您将使用接口创建具有SCA绑定的Export组件,该组件将成为Process Designer中的AIS服务。
- 在REST_AIS_TK_Implementation下 ,双击组装图以打开组装图编辑器。
- 在REST_AIS_TK_Library => Interfaces下选择接口 ,并将其拖放到装配图上。
- 选择“ 无绑定导出”,然后单击“ 确定” 。
图20.创建一个SCA导出
- 在装配图中,右键单击新创建的导出组件,然后选择Generate Binding => SCA Binding 。
- 选择导出组件后,在“ 属性”视图中单击“ 绑定”选项卡。 确保已选中使操作对IBM Process Designer可见的复选框。
- 单击Ctrl + S进行保存。
注意 :当您发布完成的SCA实现时,此SCA导出组件将在Process Designer中作为AIS服务公开,如图21所示。
图21.在Process Designer中将SCA导出为AIS
创建SCA HTTP导入
为了调用外部REST服务,您需要使用HTTP绑定实现SCA导入。
- 在REST_AIS_TK_Implementation下 ,双击组装图以打开组装图编辑器。
- 在REST_AIS_TK_Implementation => Interfaces下选择新创建的接口 ,然后将其拖放到装配图画布上的任何位置。
- 在“组件创建”对话框中,选择“ 无绑定导入”,然后单击“ 确定” 。
- 右键单击生成的导入组件,然后选择Generate Binding => HTTP Binding 。
- 输入要集成的REST服务的端点URL,然后单击确定 。 SCA导入上的图标应更改。
- 在程序集编辑器中,选择SCA导入,然后选择“ 属性”视图,以进一步修改HTTP绑定详细信息。
图22.带有HTTP绑定的SCA导入
- 如果HTTP方法不是
GET
,请从其下拉列表中选择适当的动词。 - 单击“ 属性”视图中的“ 方法绑定”选项卡。
- 选择REST服务的方法名称,并确保正确设置方法绑定属性。 ( 注 :如果HTTP方法设置为
POST
在方法绑定选项卡,但该方法被设置为GET
在Binding选项卡,这将在运行时使用HTTP方法是POST
上重写所述的具体方法设置的属性值。绑定级别属性值。)图23.设置HTTP方法绑定
- 单击Ctrl + S进行保存。
如果目标REST服务在受保护的服务器上运行,则需要在流程服务器上配置SSL安全证书。
- 在管理控制台中,选择安全性=> SSL证书和密钥管理 。
图24. SSL证书和密钥管理
- 如果使用独立服务器,则应具有
NodeDefaultSSLSettings
。 在群集环境中,您还应该具有CellDefaultSSLSettings
。 对于独立服务器,请选择NodeDefaultSSLSettings ; 否则,请选择CellDefaultSSLSettings以在单元级别配置SSL证书。 - 选择密钥库和证书 。
- 选择NodeDefaultTrustStore作为独立服务器,选择CellDefaultTrustStore作为集群环境。
- 如果尚未完成,请选择“ 签署者证书”以添加证书。
图25.配置签名者证书
- 返回装配图,选择HTTP导入,然后在“ 属性”视图中将SSL配置名称设置为适当的密钥存储名称。
图26. HTTP绑定属性
注意 :对于独立服务器,它应该是
NodeDefaultTrustStore
;对于集群环境,它应该是CellDefaultTrustStore
。 - 单击Ctrl + S进行保存。
实现中介流组件(MFC)
在这种情况下,目标REST服务使用Process Designer不支持的数据类型。 因此,您需要转换传入的数据并将其映射到模式生成的业务对象。 MFC提供了一个内置的映射组件,可以轻松完成任务。
- 在REST_AIS_TK_Implementation装配图中,在调板的Components下选择Mediation Flow ,并将其拖放到装配图上。
图27.添加中介流
- 根据需要重命名中介流组件。
- 将CompanyInfoAISExport1连接到新创建的中介流组件(在此示例中为REST_Mediation)。 在弹出对话框中,单击“ 确定”以将匹配的界面添加到中介流中。
- 将REST_Mediation连接到REST_CompanyInfoImport1。 在弹出对话框中,单击“ 确定”以添加要在中介流组件上创建的匹配引用。
- 单击Ctrl + S进行保存。
- 双击
REST_Mediation
并单击“ 是”以实施。 - 单击“ 确定”以在默认文件夹中生成该实现( 注 :如果要在某个文件夹中创建中介流实现,请单击“ 新建文件夹”以定义特定的目标文件夹。)
- 在中介流编辑器中,选择操作,然后单击空白中介流 。
图28.实现调解流程
- 在Transformation下 ,选择HTTP Header Setter并将其拖放到编辑器中。
- 将操作输入连接到HTTP Header Setter。
图29. HTTP Header Setter中介原语
- 选中HTTP Header Setter原语后,单击Properties视图中的Details选项卡。
- 单击“ 添加”以设置HTTP标头值,然后从“ 标头名称”中选择“ 媒体类型” ,然后在“ 值”字段中输入
application/xml
。图30.设置HTTP标头值
- 点击完成 。
- 同样,将标题值设置为Accept和Content-Type 。
图31. HTTP Header Setter详细信息
- 在右窗格中,展开“ 引用”,然后选择目标REST服务操作并将其拖放到编辑器中。
- 将HTTP Header Setter原语连接到新添加的Service Invoke原语,然后选择使用Mapping原语转换消息 。
- 双击新创建的Mapping原语,并在New XML Map向导中接受默认值,然后单击Finish 。 根据需要实施映射,以正确构造目标REST服务的输入。
- 同样,将“服务调用”原语的out端子连接到“输入响应”。 在弹出对话框中,选择“使用映射原语转换消息” 。
- 双击新创建的Mapping原语,并在New XML Map向导中接受默认值,然后单击Finish 。
图32.映射示例
- 实现原语以正确地将服务响应映射到AIS接口的简化输出。
图33.调解流程示例
- 单击Ctrl + S进行保存。
- 返回到REST_AIS_TK_Implementation组装图,然后选择中介流组件。
- 在“ 属性”视图中,选择“ 详细信息”选项卡,并将中介接口的“ 首选”交互样式设置为“ 同步” 。 ( 注意 :默认情况下,中介的首选交互样式为Any 。)
图34.首选的交互样式
- 选择导出CompanyInfoAISExport1并确保将首选交互样式设置为Synchronous 。 另外,请确保选中了“ 绑定”选项卡中的“ 使操作对IBM Process Designer可见” 。
为了使您的SCA服务可以在Process Designer中作为AIS使用,以便BPD可以使用它,首选的交互样式必须为Synchronous (不是Any或Asynchronous ),以便控件可以返回给调用BPD。 否则, 可以与服务一起使用吗? 在Process Designer中,AIS组件的状态显示为“ 否”,而不是“ 是” 。
图35. Process Designer中的AIS定义
测试SCA实施
在将SCA实施发布到Process Center之前,请确保在本地服务器上对服务进行单元测试。
图36.服务器视图
- 在装配图中,右键单击
ComponentInfoAISExport1
并选择Test Component 。 - 在初始请求参数部分下输入测试数据
- 单击继续以运行测试。
图37.集成测试客户端
- 在“ 部署位置”向导中,选择本地测试服务器,然后单击“ 完成” 。
图38.选择部署位置
- 在“用户登录-默认模块测试”对话框中,输入适当的用户ID和密码进行连接,然后单击“ 确定” 。 在开始执行测试之前,这会自动将应用程序部署到服务器。
如果测试成功完成,则准备将流程应用程序连接到Process Designer中的高级集成。 否则,进行必要的修复,然后右键单击“ 调用”,然后选择“ 重新运行”以再次进行测试。
图39.重新执行测试
一旦对SCA实施进行了彻底的测试,请确保该工具箱的状态未[changed]
。 如果是这样,请右键单击并从菜单中选择“ 刷新并发布” ,以将代码同步到Process Center。
图40.刷新并发布工具箱
通过AIS调用REST服务
在REST_AIS_TK_Implementation
模块中定义的SCA导出在Process Designer中成为AIS。 AIS的输入和输出与您在“导出”组件的界面中定义的类型一致。
- 启动Process Designer并在设计器中打开工具箱。
- 在实现下 ,双击CompanyInfoAIS以打开AIS。 确保没有错误或警告。
图41.高级集成服务
- 为了确保AIS正常工作,请创建测试工具。 单击用户界面旁边的+号,然后选择人员服务 。
- 单击“ 变量”选项卡,然后添加保存AIS输入和输出的变量。
图42.设置变量
- 返回到“ 图”选项卡,并将AIS拖放到图上。
- 选择AIS后,单击“ 数据映射”选项卡。
- 对于“ 输入映射” ,单击“选择变量”图标以选择输入变量。
- 同样,单击“选择变量”图标以选择变量以保存“ 输出映射”的输出值。
图43.测试装置
- 添加一个Coach任务以输入输入数据,并添加一个Coach任务以显示调用AIS的输出。
图44.人员服务图
- 保存更改
- 单击运行服务以执行测试工具并运行测试以确保测试成功完成。
图45.运行服务
如果遇到问题,请单击“ 调试服务”以调试模式运行测试工具。 您可以单步执行服务以查找故障点。
在调用AIS之前,您应该看到SCAConnector
项类型,如图46所示。
图46.调试服务
在下一步中,如果看到的是默认的Coach而不是所构建的Coach,则可能是SCA应用程序未正确部署。
图47.状态栏
从流程应用程序中调用AIS
为了将集成层与业务逻辑分开,AIS在工具箱中实现,以便多个流程应用程序可以利用其服务。 本节演示如何从流程应用程序调用工具箱中定义的AIS。
- 为了使该工具包可用于其他工具包和流程应用程序,您需要创建一个快照。 单击快照图标以创建工具箱的新快照。
提示 :Integration Designer使用三位数的版本系统 (<major>。<minor>。<service>)来版本SCA应用程序。 因此,建议您也为快照使用三位数字的版本。
- 创建快照后,单击“处理中心”图标以返回主页。
- 单击“ 流程应用程序”选项卡,然后选择一个现有流程应用程序,或者通过单击“ 创建新流程应用程序” ,然后选择“ 在设计器中打开”来创建新流程应用程序 。
- 在TOOLKITS下 ,将依赖项添加到AIS工具箱
REST_AIS_TK
。图48.工具包依赖性
- 如果您使用的是新流程应用程序,请通过单击“ 流程”旁边的+并选择“ 业务流程定义”来创建一个新流程。 否则,请打开现有过程。
- 在“ 变量”选项卡中,为AIS添加适当的输入和输出变量。
- 返回到“ 图表”选项卡。 在右侧窗格中,选择“ 活动”任务,然后将其拖放到“ 参与者”泳道上。
- 在参与者通道中添加第二个活动询问。
- 重命名任务,使其描述任务的目的。
- 在TOOLKITS下 ,展开REST_AIS_TK ,然后在Implementation下选择CompanyInfoAIS并将其拖放到System通道上。
图49.将AIS添加为任务
- 连接所有任务以完成业务流程。
图50.添加人工任务
- 在“ 参与者”通道中右键单击活动任务,然后选择“ 活动向导” 。
- 选择用户任务 ,然后单击下一步 。
- 验证变量,然后单击完成 。
- 双击用户任务以实现Coach输入输入并显示输出。
- 在图中选择AIS任务CompanyInfoAIS 。
- 在“ 属性”视图中选择“ 数据映射” ,然后设置输入和输出。
图51.业务流程定义
- 保存更改。
注意:这是BPD的最简单示例。 在通常的实践中,您可以创建包装器集成服务 ,该服务调用AIS服务,然后将包装器服务添加到BPD。 如果要创建测试工具或包装器服务(类似于在
REST_AIS_TK
创建的测试工具),则可以将测试工具从工具箱复制到流程应用程序。图52.从工具箱复制服务
- 单击检查器切换到流程检查器 。
- 单击运行过程图标以测试过程。
图53.流程检查器
- 运行流程实例并验证端到端流程。
有关如何使用Inspector运行和调试流程实例的更多信息,请参阅信息中心 。
提示和技巧
Process Inspector无法单步执行实现AIS的SCA应用程序。 为此,在Integration Designer中,右键单击工具箱,然后选择Test => Attach to Toolkit 。
图54.附加到工具箱
单击继续图标以打开一个对话框,提示您将测试客户端连接到哪个服务器。
图55.启动测试客户端跟踪
在这种情况下,请选择Process Center而不是本地Process Server,因为Process Application在Process Center的回放服务器上运行。
图56.选择服务器
一旦数据传递到SCA实现,您就可以在测试客户端中跟踪事件。
运行时管理
与AIS实现相关联的SCA应用程序被部署为WebSphere企业应用程序,您可以直接从WebSphere Integrated Solutions Console或管理控制台进行管理。
当您在Process Designer中单击“运行服务”或“运行流程”时,必要的SCA工件会自动安装到Process Center上的播放服务器上。 在管理控制台中,选择应用程序=> SCA模块。 SCA模块名称是<toolkit name>_Implementation
与在Integration Designer中一样。
图57. WebSphere Integrated Solutions Console
当前工作流程应用程序或工具箱的应用程序名称为<acronym>>-Tip-<module name>
。 如果部署快照的特定版本,则“ Tip
将替换为快照版本。
图57显示了REST_AIS_TK_Implementation模块的三个实例:
- 在执行REST_AIS_TK工具包中的测试工具期间,将安装
REST-Tip_REST_AIS_TK_ImplementationApp
。 - 在执行REST测试应用程序流程应用程序期间,将安装
TEST-Tip_REST_AIS_TK_ImplementationApp
。 - 在REST测试应用程序流程应用程序快照的部署过程中,将安装
TEST-1.0.0_REST_AIS_TK_ImplementationApp
。
结论
本文为您提供了将REST服务集成到IBM Business Process Manager V8.0.1 Advanced中的分步示例。 由于REST服务没有WSDL,因此如果没有自定义编码,则不能使用Process Designer中的内置Web服务集成来使用REST服务。 此外,使用高度复杂的XML模式可能会导致在没有服务器脚本的情况下解析错误。 SOA原则是将业务层与技术服务层分离。 因此,应将业务流程与低层服务分开,以集成外部REST服务,并通过AIS使用服务。 这将业务逻辑与中间件功能分开,并使解决方案更加健壮和可重用。
翻译自: https://www.ibm.com/developerworks/bpm/library/techarticles/1312_hyakuna/1312_hyakuna.html
restful集成规范