上篇文章主要介绍了将tb的websocket接口进行透传,转化为业务所需要的格式。上上篇文章讲得是如何将tb的rest接口进行透传,转化为标准的格式。 基于以上两篇文章属于对单接口的改造能力,本篇文章就介绍一下如何将tb的多个接口进行聚合,以满足复杂的业务场景。
问题 :
需求:查询某资产所包含的所有设备(出参应包含设备名称,设备描述,设备状态)。
分析:请求参数肯定是资产id,查看tb平台的api,发现只能根据资产id获取该资产包含的所有设备id。也就是说只能获取到资产和设备的关系。如果想获取设备的详细信息(设备名称,设备描述等)是需要设备相关的api接口去解决的。当然,tb提供了根据设备id获取设备详情信息的接口。这就需要聚合接口来查询了。之前我介绍过kettle平台的强大功能,kettle善于处理多数据源的数据聚合,善于处理数据协议与格式的转换。很明显是非常适合用来解决此类问题的。下面是tb相关接口(关系接口和设备接口)
方案:
采用kettle平台处理。下图为编写的kettle转换文件。
查看“REST Client”节点,你会发现调用的就是tb的关系接口,根据资产id将资产与设备的关系查询出来。
查看“解决result接口”,是通过js去调用tb的设备详情接口来实现的,并最终将数据封装成标准的json格式。
将kettle转换文件上传到kettle平台,并进行测试。
最终输出结果如下:
{
"success":true,
"resultCode":"00",
"resultMsg":"",
"result":[
{
"name":"1_G03",
"id":"53858b20-8554-11eb-bccd-c11a74ecd150",
"nickname":"出线柜",
"note":"出线柜"
},
{
"name":"1_G02",
"id":"5386eab0-8554-11eb-bccd-c11a74ecd150",
"nickname":"电源计量柜",
"note":"电源计量柜"
},
{
"name":"1_G01",
"id":"53884a40-8554-11eb-bccd-c11a74ecd150",
"nickname":"电源进线",
"note":"电源进线"
},
{
"name":"1_G05",
"id":"538a4610-8554-11eb-bccd-c11a74ecd150",
"nickname":"出线柜",
"note":"出线柜"
},
{
"name":"1_G01_ZB",
"id":"538bf3c0-8554-11eb-bccd-c11a74ecd150",
"nickname":null,
"note":null
},
{
"name":"1_G04",
"id":"53903980-8554-11eb-bccd-c11a74ecd150",
"nickname":"出线柜",
"note":"出线柜"
},
{
"name":"1_G06",
"id":"53928370-8554-11eb-bccd-c11a74ecd150",
"nickname":"出线柜",
"note":"出线柜"
},
{
"name":"1_G03_ZB",
"id":"946e6cf0-878f-11eb-b0f9-870b9c7d858c",
"nickname":null,
"note":null
},
{
"name":"1_G04_ZB",
"id":"a9b92b90-878f-11eb-b0f9-870b9c7d858c",
"nickname":null,
"note":null
},
{
"name":"1_G05_ZB",
"id":"b48ffb20-878f-11eb-b0f9-870b9c7d858c",
"nickname":null,
"note":null
},
{
"name":"1_G06_ZB",
"id":"baf58de0-878f-11eb-b0f9-870b9c7d858c",
"nickname":null,
"note":null
}
]
}
总结:
本篇文章介绍了如何通过kettle平台将tb的接口进行聚合,来满足实际的业务需求。如果遇到复杂的业务场景,接口聚合是不可避免的,使用kettle平台作为中台是一个很好的选择,因为通过kettle平台几乎可以满足所有的业务聚合转换需求。