上一篇文章探讨了如何拓展Kernel。本文来讲下如何为OpenTCS增加WebAPI。由于OpenTCS有MES系统或别的第三方系统对接时通常都是使用WebAPI进行交互的。OpenTCS系统的WebAPI遵循RestAPI的设计,提供了一系列API接口,这些API接口通过Document可以查看到。
如何测试这些API?
可以通过浏览器来测试(推荐使用Google浏览器),比如这里要获取全部的车辆信息,可以在浏览器中输入如下地址:
得到数据反馈如下(这里笔者的系统中由两台移动机器人,V-0001/V-0002):
[ {
"name" : "V-0001",
"properties" : {
"IP" : "192.168.1.4",
"Port" : "5001"
},
"length" : 1000,
"energyLevelGood" : 90,
"energyLevelCritical" : 30,
"energyLevel" : 100,
"integrationLevel" : "TO_BE_UTILIZED",
"procState" : "IDLE",
"transportOrder" : null,
"currentPosition" : "Point-0009",
"state" : "IDLE"
}, {
"name" : "V-0002",
"properties" : {
"IP" : "192.168.1.3",
"Port" : "5001"
},
"length" : 1000,
"energyLevelGood" : 90,
"energyLevelCritical" : 30,
"energyLevel" : 100,
"integrationLevel" : "TO_BE_UTILIZED",
"procState" : "IDLE",
"transportOrder" : null,
"currentPosition" : "Point-0007",
"state" : "IDLE"
}]
以上数据是通过JSON打包的。内容为所有移动机器人的信息。当然也可以通过GET参数进行帅选,具体可以参考TCS的Doc来查询。
如何拓展WebApi?
本文着重讲下如何增加一个WebAPI的访问,很多时候,我们需要获取的信息往往是多样的,有些信息OpenTCS可能并未提供,那此时就需要我们自己去拓展了。下面以获取所有Point为例说明如何得到一个可以后期系统所有Point的WebApi。
WebAPI的代码存放在OpenTCS-Kernel-Extension-HTTP-Services这个包中,因此我们需要拓展这个包。
1、首先增加路由。
我们打算通过如下Url访问得到Point的信息:
此时访问肯定是得到一个大大的404错误。因此我们需要为后台添加一个Route(Route的概念在Web开发中是很重要的一个概念)。
//以下代码来自白色冰激凌的博客:https://blog.csdn.net/xlh145
//以下函数请在V1RequestHandler.java中查找
@Override
public void addRoutes(Service service) {
...
service.get("/points", this::handleGetPoints);
...
}
2、处理Http回调。
客户端访问时通过Get方式进行,那么服务端需要回调函数来处理HTTP报文,要实现handleGetPoints函数。
//以下代码来自白色冰激凌的博客:https://blog.csdn.net/xlh145
private Object handleGetPoints(Request request, Response response) throws
IllegalArgumentException {
//增加HTTP响应报文头
response.type(HttpConstants.CONTENT_TYPE_APPLICATION_JSON_UTF8);
//从系统中得到数据并打包成JSON返回
return toJson(statusInformationProvider.getPoints());
}
最终的效果如下: